Bối cảnh, lý do thực hiện đề tài Hiện nay mạng internet toàn cầu đã phát triển rất mạnh, đáp ứng rất tốt các nhu cầu về thông tin khoa học, giải trí, liên lạc, mua bán, quảng cáo v.v... của con người. Internet đã trở thành một thành phần không thể thiếu với cuộc sống hiện đại. Về bản chất, Internet chẳng qua là một hệ thống mạng, liên kết các máy tính trên toàn thế giới lại theo những chuẩn chung của nó. Với phạm vi nhỏ hơn nhưng cũng rất tương tự, có những mạng khác đó là WAN, LAN.., mỗi mô hình đó đều được ứng dụng rất nhiều tiện ích khác nhau. 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ình mạng ra đời. Vì vậy, ngày hôm nay, lúc em đang học về lập trình mạng, đã tìm được đề tài với tên “Ứng dụng chat qua mạng lan hỗ trợ đa người dùng và quản lí dữ liệu SQL”, điều đó giúp em thực hành để có cơ hội hiểu rõ hơn về mạng, về lập trình mạng – một lĩnh vực lập trình rất thú vị này. 1.2 Cơ sở lập trình Ứng dụng hoạt động dựa vào giao thức IP/TCP để truyền dữ liệu giữa hai máy khác nhau, cụ thể ở đây là một máy server để cung cấp dịch vụ và nhiều máy client sử dụng dịch vụ do máy server cung cấp để cho người dùng sử dụng. Ngôn ngữ lập trình ở đây là ngôn ngữ Java (Phiên bản J2SE 1.6) vì Java là ngôn ngữ có thể được sử dụng để viết ứng dụng chạy trên hầu hết các thiết bị (ở đây ta quan tâm tới thiết bị có hỗ trợ mạng). Trọng điểm, có mấy khả năng nổi trội do Java cung cấp mà ta có thể sử dụng là : - Lập trình đa tuyến trình (Cùng 1 ứng dụng nhưng có thể chạy nhiều tiến trình song song với nhau thay vì cứ phải tiến trình này đợi tiến trình kia kết thúc mới có thể thực hiện) - Java là một nền tảng có thể chạy trên nhiều loại thiết bị với nhiều hệ điều hành khác nhau nên có phạm vi ứng dụng rất rộng rãi. - Lập trình mạng. Lớp quan trọng nhất mà ta sử dụng là lớp Socket và ServerSocket
CƠ SỞ LÝ THUYẾT
Yêu cầu của đề tài
Chương trình Client/Server cho phép nhiều người dùng giao tiếp qua tin nhắn trong một phòng chat room và hỗ trợ chức năng gửi file.
Giới thiệu mô hình Client/Server
Máy chủ, hay còn gọi là server, là một hệ thống máy tính lớn với bộ xử lý mạnh mẽ, có khả năng hoạt động ổn định và lưu trữ lượng dữ liệu lớn Nó chuyên quản lý tài nguyên, chủ yếu là cơ sở dữ liệu, và cung cấp các dịch vụ mạng cho các máy khách Máy chủ thường hoạt động liên tục và sẵn sàng tiếp nhận các yêu cầu kết nối cũng như dịch vụ từ máy khách.
Client là thiết bị mà người dùng cuối sử dụng để truy cập và thực hiện các tác vụ thông qua dịch vụ do máy chủ cung cấp.
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ý thích hợp và trả lờ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 It ensures that data is sent in the correct order and terminates the connection once the data transfer is complete.
Địa chỉ IP là nhận diện của một máy tính trong mạng, cho phép giao thức TCP truyền tải dữ liệu chính xác giữa các máy Mỗi máy tính trên mạng sẽ có một địa chỉ IP riêng biệt, giúp xác định vị trí của máy trong hệ thống mạng.
2.4.3 Giới thiệu về cổng Port
Giao thức TCP chỉ có khả năng truyền dữ liệu chính xác giữa các máy tính mà chưa thể định hướng đến từng ứng dụng cụ thể Trong môi trường đa nhiệm hiện nay, nhiều ứng dụng có thể hoạt động đồng thời và sử dụng dịch vụ mạng Khi máy chủ A gửi dữ liệu đến ứng dụng u trên máy B, dữ liệu phải được chuyển đến đúng ứng dụng này, không phải ứng dụng khác Để đảm bảo điều này, dữ liệu được gửi từ máy chủ A cần chứa thông tin giúp máy B xác định ứng dụng u, và thông tin này chính là địa chỉ port trên máy B, hoạt động như một lỗ cắm ảo mà ứng dụng u đã đăng ký để nhận dữ liệu từ máy chủ A.
Trên thực tế, địa chỉ port là một số nguyên 2 byte có giá trị từ 0 đến 65535
Cổng từ 0 đến 1023 là các cổng phổ biến được sử dụng cho nhiều ứng dụng thông dụng, chẳng hạn như HTTP trên cổng 80, mail trên cổng 25, FTP trên cổng 21 và Telnet trên cổng 23 Các cổng còn lại có thể được sử dụng một cách linh hoạt cho các mục đích khác nhau.
Mỗi cổng chỉ có thể được sử dụng cho một ứng dụng tại một thời điểm nhất định Chẳng hạn, nếu cổng 55 đã được ứng dụng A sử dụng, thì ứng dụng B sẽ không thể sử dụng cổng này.
4 thể sử dụng cổng 55 đó nữa chừng nào ứng dụng trước đó chưa có đóng cổng 55 lại
- 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, tạo nên một khái niệm quan trọng trong lập trình mạng Nhờ vào sự kết hợp này, các ngôn ngữ lập trình cung cấp các gói và giao diện lập trình (API) hỗ trợ lập trình viên trong việc phát triển ứng dụng mạng qua giao thức TCP Một trong những ngôn ngữ nổi bật trong lĩnh vực này là Java, mà tôi sẽ giới thiệu ngay sau đây.
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 đó
Lắng nghe và chờ đợi yêu cầu kết nối trên cổng đã chỉ định, sau đó thực hiện kết nối khi có yêu cầu Phương thức public Socket(int port) được sử dụng để tạo cổng kết nối trên cổng port Khi có yêu cầu kết nối, phương thức public accept() sẽ chấp nhận kết nối và trả về một đối tượng Socket, mô tả nguồn đã được kết nối.
Tạo luồng dữ liệu vào ra để có thể truyền dữ liệu trên cổng đến một socket ở máy khách (Đây là chức năng quan trọng nhất)
Đóng kết nối lúc không sử dụng
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ủ đó
Tạo luồng dữ liệu vào ra
2.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 getInputStream() : Trả về một luồng mà có thể nhập dữ liệu vào getOutputStream() : Trả về một luồng ghi dữ liệu close() : Đóng kết nối khi không cần
Public Socket ( InetAddress address, int port)
Public void Close() ; Đóng kết nối
PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH
Phân tích yêu cầu
Hiện nay, mạng LAN đang phát triển mạnh mẽ trong trường học, cơ quan tổ chức và hộ gia đình, dẫn đến nhu cầu giao tiếp và trao đổi thông tin trong mạng LAN tăng cao Do đó, việc phát triển một chương trình chat phục vụ nhu cầu này là rất cần thiết.
Phân tích chức năng
Đăng kí và đăng nhập vào server với một user do người dùng tự chọn
Username và password của người dùng được lưu trên SQL Server
Nhận danh sách các user đang online trên server
Gửi tin nhắn tới một 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ừ user 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 nhập từ trước thì cho đăng nhập
Nếu một người đã đăng nhập với nickname đó, người dùng mới sẽ được yêu cầu đăng xuất tài khoản trước đó để có thể đăng nhập vào.
Trả về danh sách các user online cho user có yêu cầu
Nhận tin nhắn từ một user và chuyển tiếp tới các user khác tương ứng theo yêu cầu của user gửi
Loại user khi user yêu cầu đăng xuất
Xác nhận gửi file của đến user đượ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
Thiết kế hệ thống
3.4.1 Sơ đồ Usecase tổng thể
Sơ đồ Usecase tổng thể
Người dùng: Tất cả các người dùng đang vào máy khách, có chức năng kết nối tới máy chủ, gửi tin nhắn, gửi tập tin, đăng nhập
Người quản trị: có thể truy cập và quản lý máy chủ, có quyền khởi động máy chủ
Sơ đồ hoạt động Kết nối tới máy chủ
Sơ đồ hoạt động Đăng nhập
Sơ đồ hoạt động Đăng ký
Sơ đồ hoạt động Gửi tập tin
Sơ đồ tuần tự Kết nối tới máy chủ
Sơ đồ tuần tự Đăng nhập
Sơ đồ tuần tự Đăng ký
TRIỂN KHAI THỰC HIỆN VÀ KẾT QUẢ
Môi trường triển khai
- Hệ điều hành : Microsoft Window 8.0
Kết quả thực hiện
- 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
Mặc dù đề tài có phạm vi nhỏ, nhưng vẫn còn nhiều chức năng tiềm năng chưa được triển khai, như truyền file và gửi tin nhắn định dạng, tương tự như các ứng dụng chat hiện tại.
Giao diện hiện tại vẫn chưa thật sự tiện lợi cho người dùng Các thử nghiệm chỉ được thực hiện trên máy trong mạng LAN, giữa máy thật và máy ảo, cũng như trên máy cục bộ thông qua địa chỉ localhost.
Một số hình ảnh minh họa
15 Giao diện đăng nhập đăng kí của Client
Giao diện chat của Client
16 Giao diện Gửi File của Client
Chương trình
4.3.2 Chương trình trên máy server a.File MainForm.java
18 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
20 Nút “Khởi động Máy Chủ”
Khai báo ban đầu và khai báo hiển thị ra màn hình appendMessage
Khai báo ban đầu, thiết lập luồng truyền dữ liệu Socket :
Thiết lập kết nối d File OnlineListThread.java
Khai báo thiết lập ban đầu
4.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” b MainForm.java
26 Thiết lập kết nối đến Server
Hàm hiện danh sách online
Khai báo ban đầu, khởi tạo ClientThread và thiết lập DataInputStream
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 e File SendingFileThread.java