# Java - Multi chat client - server socket @Daniel Daniel Jun 10, 2021 0:00 ## Đồ án chat (Java) --- ### Table of content 1. [Introduction](#introduction) 2. [Main Content](#main-content) 1. [Các chức năng có trong gợi ý của yêu cầu bài tập](#requirements) 2. [Các chức năng khác (hoặc tương tự)](#addition) 3. [Chi tiết bài tập](#details) 1. [Tổng quan](#general) 2. [Cấu trúc](#structure) 3. [Cách cài đặt và chạy chương trình](#setup) 4. [Các nguồn tham khảo](#references) --- ### Content - <p id="introduction">Introduction</p> - Họ tên: Bùi Tiến Đức - MSSV: 20424016 > Bài tập phần lớn được xây dựng lại và tìm hiểu ở mức độ cơ bản thông qua các nguồn chia sẻ. Do java không phải là thế mạnh của em nên mong thầy/cô xem xét ạ. - <p id="main-content">Main Content</p> 1. <p id="requirements">Các chức năng có trong gợi ý của yêu cầu bài tập</p> - [ ] Đăng ký tài khoản - [ ] Đăng nhập với tài khoản đã đăng ký - [x] Chat - [x] Chat có emoji - [x] Chat cùng lúc với nhiều người (mở nhiều cửa sổ) - [ ] Chat group - [x] Gửi file và nhận file - [x] Gửi hình và nhận hình - [ ] Voice chat - [ ] Webcam 2. <p id="addition">Các chức năng khác (hoặc tương tự)</p> - Đăng ký username trong session hiện tại (nghĩa là khi khởi động client, sẽ được chọn 1 username duy nhất để tham gia chat) - Xem danh sách các users đang online - Thông báo người dùng muốn kết nối/đã thoát khỏi phiên trò chuyện 3. <p id="details">Chi tiết bài tập</p> 1. <p id="general">Tổng quan:</p> - Sử dụng giao thức TCP để truyền nhận dữ liệu. 2. <p id="structure">Cấu trúc</p> - client: Xử lý logic và UI của client - data: Tạo các đối tượng file hoặc thông tin user để gửi đi - image: Gồm các hình ảnh, icon được sử dụng trong ứng dụng - login: Xử lý tạo user để tham gia cuộc trò chuyện - server: Xử lý, quản lý các users đăng nhập vào hệ thống - transformer: Xử lý việc giải mã các thông tin truyền nhận và ghi log - DB: Không sử dụng 3. <p id="setup">Cách cài đặt và chạy chương trình</p> - Trong trường hợp sử dụng IDE Idea IntelliJ - Chọn `File` > `Project Structure` > `Artifacts` ![image](https://i.imgur.com/HFulIH2.png) - Sau đó bấm dấu cộng (`+`) để thêm các tùy chọn. `JAR` > `From modules with dependencies` ![](https://i.imgur.com/EWLOw55.png) - Bấm `Browse` tại `Main Class` để chọn class. ![](https://i.imgur.com/yI1LCm7.png) - Bấm `Ok` để xác nhận thêm class. ![](https://i.imgur.com/Ll205Ko.png) - Sau đó đổi tên cho thư mục chứa file jar (dựa trên tên class tương ứng) ![](https://i.imgur.com/bbP7Xjz.png) - Làm tương tự với các class còn lại. ![](https://i.imgur.com/juLjboz.png) - Sau đó chọn Meta cho từng class. Bấm vào từng class, chọn file `*.jar` sẽ hiển thị như hình dưới. ![](https://i.imgur.com/6Mjv7h1.png) - Chọn `Manifest File` . Vào các thư mục `META-INF` trong từng thư mục tương ứng để chọn. Các class khác tương tự. ![](https://i.imgur.com/XsoQ6QN.png) - Chọn `Ok` để hoàn tất việc thiết lập, trên thanh công cụ, chọn thẻ `Build` > `All artifacts` > `Build` ![](https://i.imgur.com/XWUDEvQ.png) - Lúc này, trên cây thư mục sẽ xuất hiện tệp `artifacts` trong `out` và các thư mục chứa file `jar` đã chọn ![](https://i.imgur.com/adytZ7b.png) - Có thể click phải chuột vào file `jar` chọn `Run ...` hoặc double click trong Explorer của máy để chạy chương trình - Nếu sử dụng hệ điều hành Linux, cần cho phép quyền của file trước khi chạy - Click phải chuột vào file `Server*.jar` > `Permissions` > `Allow executing file as program` . Làm tương tự với file `Login*.jar` ![](https://i.imgur.com/Ypjk7l1.png) - Khởi động Server. Mở file `Server*.jar` > `Start` ![](https://i.imgur.com/iMm1xdD.png) - Tạo 1 user với username và host mặc định là `localhost`, port `8080` . Chạy file `Login*.jar` > nhập username > `Login` ![](https://i.imgur.com/YfMxGRA.png) - Xuất hiện dashboard gồm tên user và danh sách người dùng online ![](https://i.imgur.com/eyK6SQJ.png) - Mở thêm 1 cửa sổ Login khác để tạo thêm user. Lúc này 2 cửa sổ sẽ hiện tên những người online. Chọn vào tên người dùng và chọn `Chat` và làm theo các bước để bắt đầu chat ![](https://i.imgur.com/QJWY8hp.png) - Sau đó khung chat sẽ hiển thị và có thể gửi các tin nhắn dạng văn bản, icon, các loại file. ![](https://i.imgur.com/gApdW2f.png) - Có thể mở thêm nhiều user khác và thực hiện chat tương tự. 4. <p id="references">Các nguồn tham khảo</p> - [https://github.com/toanbku/java-socket-chat?fbclid=IwAR1tMcdVXFHVSfSY-v0k6uIW_MoKzTF0to3n5JJmgB-fRLeJiCMxnezOYS0](https://github.com/toanbku/java-socket-chat?fbclid=IwAR1tMcdVXFHVSfSY-v0k6uIW_MoKzTF0to3n5JJmgB-fRLeJiCMxnezOYS0)