Với mục tiêu để cho các sinh viên ra trường với một kiến thức tốt về mạng, vềlập trình ứng dụng trên mạng để có thể làm được nhiều việc khác nhau, bộ môn lập trìnhmạng ra đời.. Ứng dụng
CƠ SỞ LÝ THUYẾT
Yêu cầu đề tài
Tạo ra một chương trình Client/Server cho phép nhiều người dùng tham gia phòng chat room để gửi và nhận tin nhắn trực tiếp với nhau, đảm bảo khả năng giao tiếp theo thời gian thực Ngoài ra, chương trình còn tích hợp chức năng gửi file giữa các người dùng, giúp chia sẻ tài liệu một cách dễ dàng và nhanh chóng Điều này giúp nâng cao trải nghiệm người dùng bằng cách cung cấp một môi trường trò chuyện đa chức năng, phù hợp với các nhu cầu trao đổi thông tin trong nhóm hoặc cộng đồng trực tuyến Chương trình cần đảm bảo tính ổn định, bảo mật và dễ sử dụng để phục vụ số lượng lớn người dùng cùng lúc.
Giới thiệu mô hình Client/Server
Máy chủ (Server) là hệ thống máy tính lớn có bộ xử lý mạnh mẽ và khả năng hoạt động đáng tin cậy, chuyên quản lý tài nguyên, chủ yếu là cơ sở dữ liệu Nó cung cấp các dịch vụ mạng cho máy khách (client) và thường chạy liên tục trong thời gian thực, sẵn sàng chấp nhận yêu cầu kết nối cùng các dịch vụ từ máy khách.
Client là máy khách thường được sử dụng bởi người dùng cuối, đóng vai trò trung gian giữa người dùng và máy chủ Nó hoạt động dựa trên việc gửi yêu cầu tới máy chủ để truy cập dịch vụ hoặc dữ liệu cần thiết Nhờ đó, client giúp người dùng cuối thực hiện các công việc mong muốn một cách thuận tiện và hiệu quả.
Quy trình hoạt động của mô hình này lặp lại 2 quá trình như sau :
- Client gửi yêu cầu lên server.
- Server nhận được yêu cầu thì sẽ xử lý và phản hồi lại client.
Giới thiệu giao thức IP/TCP
The Transmission Control Protocol (TCP) is a connection-oriented protocol that requires establishing a connection before data transmission begins and terminating it once the data transfer is complete TCP ensures data is sent in the correct order by maintaining a reliable, sequenced connection throughout the communication process This protocol is essential for applications that demand accurate and reliable data delivery, such as web browsing and email communication.
IP là địa chỉ duy nhất của một máy tính trên mạng, giúp truyền dữ liệu chính xác qua giao thức TCP/IP Nhờ địa chỉ IP, ta có thể xác định chính xác máy tính nào đang hoạt động trên mạng, đảm bảo việc liên lạc và truyền dữ liệu diễn ra thuận lợi Mỗi máy tính trên mạng có một địa chỉ IP riêng biệt, góp phần vào quá trình quản lý và định danh thiết bị một cách hiệu quả.
1.3.3 Giới thiệu về cổng Port
Trong hệ thống TCP/IP, giao thức TCP chỉ đảm bảo truyền dữ liệu chính xác giữa hai máy tính mà chưa xác định đến từng ứng dụng cụ thể trên thiết bị Hiện nay, các hệ thống máy tính hoạt động theo chế độ đa nhiệm, với nhiều ứng dụng cùng chạy song song và cùng sử dụng dịch vụ mạng Khi máy chủ A truyền dữ liệu đến một ứng dụng u trên máy B, cần đảm bảo dữ liệu đó đến chính xác ứng dụng u chứ không phải ứng dụng v Để làm được điều này, dữ liệu truyền đi đi kèm với thông tin về địa chỉ cổng (port) trên máy B, chính là “lỗ cắm ảo” đã được ứng dụng u đăng ký để nhận dữ liệu, giúp xác định đúng mục tiêu của dữ liệu trong hệ thống đa nhiệm.
Trên thực tế, địa chỉ port là một số nguyên 2 byte có giá trị từ 0 đến 65535 Nó có đặc điểm :
Các cổng có giá trị từ 0 đến 1023 là các cổng phổ biến dành cho các ứng dụng thông dụng như HTTP (cổng 80), SMTP (cổng 25), FTP ( cổng 21), Telnet (cổng 23) giúp đảm bảo kết nối ổn định và an toàn Những giá trị còn lại trong phạm vi này có thể được sử dụng linh hoạt cho các dịch vụ tùy chỉnh hoặc ứng dụng đặc thù khác, tối ưu hóa hoạt động mạng của hệ thống.
Trong hệ thống, mỗi cổng mạng chỉ được sử dụng cho một ứng dụng tại mỗi thời điểm để đảm bảo tính độc lập và tránh xung đột Ví dụ, nếu một ứng dụng đã chiếm dụng cổng 55, thì các ứng dụng khác không thể truy cập hoặc sử dụng cổng này cho đến khi ứng dụng hiện tại giải phóng cổng 55 bằng cách đóng kết nối Việc quản lý cổng chặt chẽ giúp duy trì an toàn hệ thống và tránh lỗi truy cập chồng chéo.
- Socket là một khái niệm để định vị một dịch vụ của một máy tính trên mạng khi kết hợp hai khái niệm IP và Port lại.
- Socket có những nhiệm vụ như sau : Gắn một cổng trên máy.
Lắng nghe các kết nổi.
Kết nối/Đóng kết nối đến máy tính ở xa qua cổng đã gắn
Lắng nghe dữ liệu đến.
Socket là sự kết hợp giữa địa chỉ IP của máy tính và cổng Port mà ứng dụng sử dụng, giúp các lập trình viên dễ dàng phát triển các ứng dụng mạng trên giao thức TCP Chính nhờ vào khái niệm Socket, các ngôn ngữ lập trình như Java cung cấp các gói và API hỗ trợ lập trình liên quan đến mạng một cách hiệu quả Java là ví dụ điển hình cho các ngôn ngữ có tích hợp sẵn các công cụ để làm việc với Socket, giúp quá trình lập trình mạng trở nên đơn giản và linh hoạt hơn.
Lập trình mạng trong Java
Mở một cổng kết nối trên server, sẵn sàng hoạt động trên cổng đó. public Socket(int port) : Tạo cổng kết nối trên cổng port.
Lắng nghe và chờ đợi các yêu cầu kết nối trên cổng mạng, sau đó tiến hành kết nối khi có yêu cầu đến Phương thức `public accept()` cho phép chấp nhận một kết nối đến, đồng thời trả về một đối tượng Socket mô tả nguồn đã được kết nối, giúp quản lý các kết nối hiệu quả trong ứng dụng mạng của bạn.
Trong quá trình truyền dữ liệu qua mạng, tạo luồng dữ liệu vào ra là bước quan trọng giúp gửi và nhận dữ liệu giữa máy chủ và máy khách thông qua các socket Hàm getInputStream() trả về một luồng nhập dữ liệu, cho phép nhận dữ liệu từ máy khách, trong khi hàm getOutputStream() cung cấp một luồng xuất dữ liệu để gửi thông tin đi Sau khi hoàn tất truyền dữ liệu, cần đóng kết nối để giải phóng tài nguyên và đảm bảo an toàn hệ thống.
7 close() : Đóng kết nối khi không cần
Kết nối tới một máy chủ thông qua địa chỉ IP và số hiệu cổng trên máy chủ đó.
Public Socket(InetAddress address, int port)
Tạo luồng dữ liệu ra vào.
Public InputStream getInputStream() ; Đóng kết nối.
Public void Close(); Đóng kết nối
1.4.3 Một số gói , lớp bổ trợ khác a Gói Swing, awt.event : tạo giao diện người dùng b Gói Runnable, Thread : Hỗ trợ đa tiến trình c Gói java.io : Cung cấp các lớp vào ra dữ liệu
PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH
Phân tích yêu cầu
- Viết chương trình cho phép chat room giữa nhiều người qua mạng.
Phân tích chức năng
- Đăng nhập vào server với một cái nickname do người dùng tự chọn
- Nhận danh sách các nick đang online trên server.
- Gửi tin nhắn tới một người, nhiều người hoặc tất cả mọi người online khác trên server.
- Thực hiện gửi file đến một máy client khác
- Nhận tin nhắn từ nickname khác gửi tới.
- Tạo cổng kết nối và sẵn sàng đón nhận các sự kết nối từ client
- Xử lý yêu cầu đăng nhập từ client
Nếu nickname chưa có người đăng nhập từ trước, hệ thống sẽ cho phép đăng nhập mới Trong trường hợp đã có người khác đăng nhập với cùng nickname, người đăng nhập trước đó bắt buộc phải đăng xuất trước khi người dùng mới có thể đăng nhập thành công Đảm bảo quy trình đăng nhập diễn ra an toàn và tránh xung đột tài khoản.
- Trả về danh sách các nickname online cho nickname có yêu cầu.
- Nhận tin nhắn từ một nickname và chuyển tiếp tới các nickname khác tương ứng theo yêu cầu của nickname gửi.
- Loại nickname khi nickname yêu cầu đăng xuất.
- Xác nhận gửi file của đến nickname được yêu cầu
- Cho phép người sử dụng theo dõi các thành viên đăng nhập, đăng xuất.
Phân tích thiết kế chương trình
TRIỂN KHAI VÀ KẾT QUẢ
Môi trường triển khai
Kết quả
- Về cơ bản, chương trình thực hiện được các chức năng là tạo kết nối, chat qua lại giữa các thành viên online.
Trong phạm vi nhỏ của đề tài, hiện tại chưa thực hiện được một số chức năng như truyền file hoặc gửi tin nhắn có định dạng, những tính năng này có thể được triển khai để nâng cao trải nghiệm người dùng, tương tự như các ứng dụng chat thực sự đang phổ biến.
Giao diện hiện tại chưa thực sự tiện lợi cho người dùng trong quá trình thao tác Việc thử nghiệm chủ yếu diễn ra trên môi trường mạng nội bộ, bao gồm giữa máy thật và máy ảo, cũng như trên máy cục bộ với địa chỉ localhost Điều này cho thấy cần cải thiện khả năng sử dụng và mở rộng các thao tác để đem lại trải nghiệm tốt hơn cho người dùng.
Một số hình ảnh minh họa:
Giao diện khi nhấn nút “Khởi động Máy Chủ”
Giao diện đăng nhập của Client
Giao diện chat của Client
Giao diện gửi File của Client
Chương trình
3.3.2 Chương trình trên máy Server a File MainForm.java Thư viện:
Tạo hiển thị thông báo lên màn hình :
Các phương thức cần có trong MainForm.java:
Nút “khởi động máy chủ” :
Nút “Dừng máy chủ” : b File ServerThread.java Khai báo thư viện :
Khai báo ban đầu và khai báo hiển thị ra màn hình appendMessage :
Phương thức stop() : c File SocketThread.java Khai báo thư viện :
Khai báo ban đầu, thiết lập luồng truyền dữ liệu Socket DataInputStream :
19 d File OnlineListThread.java Khai báo thư viện:
Khai báo thiết lập ban đầu :
3.3.3 Chương trình trên máy Client a LoginForm.java
Hàm kết nối đến Server khi người dùng click vào nút “Đăng nhập” :
21 b MainForm.java Khai báo thư viện :
Thiết lập kết nối đến Server :
Hàm hiện danh sách online :
23 c File ClientThread.java Khai báo thư viện :
Khai báo ban đầu, khởi tạo ClientThread và thiết lập DataInputStream :
24 d File SendFile.java Khai báo ban đầu :
Phương thức này được gọi đến khi người dùng click vào menu “Gửi File”, sau đó kết nối đến Server và bắt đầu sẵn sàng để gửi file :
Phương thức SendFileThread này sẽ gửi yêu cầu chuyển dữ liệu đến Server :
Code của nút gửi file khi người dùng nhấn :
26 e File SendingFileThread.java Thiết lập ban đầu :
Các tiến trình xử lý :
PHÂN CÔNG , ĐÁNH GIÁ
STT MSSV/ Họ và tên
Nội dung công việc thực hiện
Tham gia làm báo cáo, powerpoint, làm chức năng ServerThread, SoundEffect, MessageStyle, ClientThread.
Tham gia làm báo cáo, powerpoint, làm giao diện cho form đăng nhập, form chat, form gửi file Làm chức năng OnlienListThread, chức năng form đăng nhập.
Tham gia làm báo cáo, powerpoint, làm chức năng cho form main của máy chủ, chức năng cho form SendFile, SendingFileThread.
Tự đánh giá điểm và tỉ lệ
Tham gia làm báo cáo, powerpoint, làm giao diện form máy chủ Làm chức năng ReceivingFileThread, 25%