Sơ lược về socket, socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận giữ liệu trên internet. Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều, hay còn gọi là twoway communication để kết nối 2 process trò chuyện với nhau. Điểm cuối (endpoint) của liên kết này được gọi là socket. Socket sẽ được sử dụng để lắng nghe mỗi khi có tin nhắn mới, reaction... để cập nhật lên giao diện. Việc cập nhật dữ liệu thời gian thực như thế đem lại một trải nghiệm tuyệt vời cho người dùng. Nó sẽ giải quyết vấn đề một cách nhanh gọn và tiếm kệm tài nguyên cho cả client và server
Trang 1KHOA KỸ THUẬT VÀ CÔNG NGHỆ
BỘ MÔN CÔNG NGHỆ THÔNG TIN
PHÁT TRIỂN ỨNG DỤNG HƯỚNG DỊCH VỤ
HỌC KỲ 4 NĂM HỌC 2024
PHÁT TRIỂN ỨNG DỤNG MINICHAT BẰNG JAVA
Giảng viên hướng dẫn: ThS Ngô Thanh Huy
Sinh viên thực hiện
Họ và tên: Nguyễn Hoàng Phương
MSSV: 170122255
Lớp: DK22TTC6
Thành phố Hồ Chí Minh, tháng 02 năm 2024.
Trang 2SV thực hiện: Nguyễn Hoàng Phương 1
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trà Vinh, ngày … tháng …… năm ……
Giáo viên hướng dẫn (Ký tên và ghi rõ họ tên)
Trang 3NHẬN XÉT CỦA THÀNH VIÊN HỘI ĐỒNG
Trà Vinh, ngày … tháng …… năm ……
Thành viên hội đồng (Ký tên và ghi rõ họ tên)
Trang 4SV thực hiện: Nguyễn Hoàng Phương 3
Với sự hiểu biết tự tìm tòi của bản thân và quá trình giảng tận tình của giảng viên qua những buổi học trực tuyến em đã cố gắng hoàn thành báo cáo một cách tốt nhất, nhưng cũng không thể tránh được thiếu sót Kính mong nhận được sự đóng góp ý kiến
từ thầy Giảng Viên bộ môn để em có thể nâng cao và bổ sung thêm kiến thức cho bản thân, hoàn thiện báo cáo kết thúc môn học đạt kết quả tốt và hoản chỉnh hơn
Em xin chân thành cảm ơn!
Thành phố Hồ Chí Minh, ngày 22 tháng 02 năm 2024
Sinh viên thực hiện
Nguyễn Hoàng Phương
Trang 5MỤC LỤC LỜI CẢM ƠN Trang 03
Mục lục Trang 04
DANH MỤC HÌNH ẢNH Trang 06
Tóm tắt Trang 07
Mở đầu Trang 08
Chương 1: Tổng quan Trang 09
Chương 2: Nghiên cứu lý thuyết Trang 10
2.1 Kiến trúc Client-Server Trang 10
2.2 Giao thức TCP/IP Trang 11
2.3 Socket Trang 12
2.3.1 Khái quát về Socket Trang 12
2.3.2 Cơ chế Socket Trang 13
2.3.3 Mô hình truyền tin Stream Socket Trang 13
2.3.4 Một số hàm cơ bản trong Socket Trang 15
2.4 Giới thiệu ngôn ngữ Java Trang 17
2.4.1 Khái niệm cơ bản về Java Trang 17
2.4.2 Ứng dụng Trang 17
2.4.3 Sự lựa chọn phổ biến Trang 18
2.4.3 Cách hoạt động của Java Trang 18
2.4.5 Java la ngôn ngữ lập trình hướng đối tượng Trang 18
2.4.6 Biến Trang 18
2.4.7 Các kiểu dữ liệu Trang 19
2.4.8 Ép kiểu trong Java Trang 19
Trang 6SV thực hiện: Nguyễn Hoàng Phương 5
3.1 Môi trường chạy ứng dụng và công cụ để lập trình ứng dụng Trang 21
3.1.1 Cài đặt máy ảo JAVA Trang 21
3.1.2 Cài đặt Eclipse IDE Trang 21
3.2 Giải pháp thực hiện Trang 22
3.2.1 Xây dựng chương trình Server Trang 22
3.2.2 Xây dựng chương trình Client Trang 23
3.2.3 Thiết kế giao diện hiển thị khung chat phía Client Trang 23
3.2.4 Chức năng của chương trình Trang 23
3.3 Thực nghiệm chương trình Trang 23
3.3.1 Khởi tạo server miniCHAT Trang 23
3.3.2 Khởi tạo Client kết nối tới Server Trang 24
3.3.3 Thông tin hiển thị trên Server Trang 27
Chương 4: ĐÁNH GIÁ KẾT QUẢ Trang 28
4.1 Kết quả đạt được Trang 28
4.2 Hạn chế Trang 28
4.3 Hướng phát triển Trang 28
Chương 5: Kêt luận Trang 29
DANH MỤC TÀI LIỆU THAM KHẢO Trang 30
Phụ lục Trang 31
Trang 7DANH MỤC HÌNH ẢNH
1 Hình 1: Mô hình Client-server
2 Hình 2: Giao tiếp Socket, tầng làm việc trong mô hình OSI và TCP/IP
3 Hình 3: Mô hình truyền tin Stream Socket
4 Hình 4 : Mô hình tương tác giữa client/server qua socket TCP
5 Hình 5: Ví dụ về một chương trình socket TCP
6 Hình 6: Các kiểu dữ liệu trong Java
7 Hình 7: Tải ứng dụng JDK (x64 Installer)
8 Hình 8: Tải ứng dụng Eclipse
9 Hình 9: Cài đặt Eclipse IDE
10 Hình 10: Khởi tại server miniCHAT
11 Hình 11: Form đăng nhập client
12 Hình 12: Giao diện chat của Client
13 Hình 13: Thử nghiệm chat chung và chat riêng
14 Hình 14 : Hiển thị thông báo login và logout trên Server
15 Hình 15 : Hình ảnh thực tế khi triển khai trong mạng LAN
Trang 8SV thực hiện: Nguyễn Hoàng Phương 7
TÓM TẮT Trong đề tài này cần nghiên cứu về ngôn ngữ lập trình java, chương trình soạn thảo Eclipse IDE for Java Developers và sử dụng Socket trong Java
Sơ lược về socket, socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận giữ liệu trên internet Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều, hay còn gọi là two-way communication để kết nối 2 process trò chuyện với nhau Điểm cuối (endpoint) của liên kết này được gọi là socket Socket
sẽ được sử dụng để "lắng nghe" mỗi khi có tin nhắn mới, reaction để cập nhật lên giao diện Việc cập nhật dữ liệu thời gian thực như thế đem lại một trải nghiệm tuyệt vời cho người dùng Nó sẽ giải quyết vấn đề một cách nhanh gọn và tiếm kệm tài nguyên cho
cả client và server
Stream Socket hay còn gọi là socket hướng kết nối, là socket hoạt động thông qua giao thức TCP (Transmission Control Protocol) Stream Socket chỉ hoạt động khi server và client đã kết nối với nhau thông qua một IP và Port, dữ liệu truyền đi được đảm bảo truyền đến đúng nơi nhận, đúng thứ tự với thời gian nhanh chóng
Trong đề tài này đã tạo được phòng chat trong mạng LAN Kết nối giữa Client
và server sử dụng socket, chat chung và chat riêng, xây dựng giao diện chat đơn giản
Trang 9MỞ ĐẦU Với sự phát triển của công nghệ thông tin hiện nay, Internet ngày càng giữ vai trò quan trọng trong các lĩnh vực khoa học kỹ thuật và đời sống Dĩ nhiên các bạn đã được nghe nói nhiều về Internet, nói một cách đơn giản, Internet là một tập hợp máy tính nối kết với nhau, là một mạng máy tính toàn cầu mà bất kì ai cũng có thể kết nối bằng máy tính riêng của họ Với mạng Internet, tin học thật sự tạo nên một cuộc cách mạng trao đổi thông tin trong mọi lĩnh vực văn hóa, xã hội, chính trị, kinh tế, …
Bên cạnh việc phát triển của thư điện tử bằng nhiều dịch vụ khác nhau (Gmail, Yahoo Mail, SMS trên mạng điện thoại di động…), việc chat trực tuyến và gửi flie trực tiếp trên Internet cũng là nhu cầu không thể thiếu Việc chat trực tuyến luôn cần thiết cho mọi người trong một doanh nghiệp, cơ sở giáo dục, y tế, các tổ chức xã hội, …
Với thực tế như vậy, em đã nghiên cứu và xây dựng mô hình MINICHAT trong mạng nội bộ của một doanh nghiệp nhỏ Có 2 dối tuợng sự dụng là client (nguời dùng) và server:
- Client: từ ứng dụng, người dùng có thể nhắn tin chia sẻ thông tin qua về với nhau giữa người dùng và người dùng, thay thế cùng dùng những chức năng có trong ứng dụng đã được xây dựng
- Server: có toàn quyền hiển thị, cập nhật và thay đổi thông tin của 1 hoặc nhiều người dùng Qua đó đảm bảo an toàn thông tin của họ
Trang 10SV thực hiện: Nguyễn Hoàng Phương 9
CHƯƠNG 1: TỔNG QUANTrong đề tài này sẽ tập trung thiết kế giải thuật cho server và client Xây dựng giao diện
để người sử dụng có thể dễ dàng trao đổi thông tin qua lại với nhau
Giải thuật chương trình phía server:
- Tạo socket, đăng ký địa chỉ socket với hệ thống
- Đặt socket ở trạng thái lắng nghe, chờ và sẵn sàng cho việc kết nối từ client
- Chấp nhận kết nối từ client, gởi nhận dữ liệu
- Đóng kết nối sau khi hoàn thành, trở lại trang thái lắng nghe và chờ kết nối mới Giải thuật chương trình phía client:
Trang 11CHƯƠNG 2: NGHIÊN CỨU LÝ THUYẾT 2.1 Kiến trúc Client-Server
Hình 1: Mô hình Client-server
Mô hình được phổ biến nhất và được chấp nhận rộng rãi trong các hệ thống phân tán là
mô hình client/server Mô hình Client-Server là mô hình mà ở đây, máy khách là các máy tính này gửi yêu cầu đến server (hay còn được gọi là máy chủ) Máy chủ, xử lý các yêu cầu đó và trả về kết quả Trong mô hình này sẽ có một tập các tiến trình mà mỗi tiến trình đóng vai trò như là một trình quản lý tài nguyên cho một tập hợp các tài nguyên cho trước và một tập hợp các tiến trình client trong đó mỗi tiến trình thực hiện một tác vụ nào đó cần truy xuất tới tài nguyên phần cứng hoặc phần mềm dùng chung Bản thân các trình quản lý tài nguyên cần phải truy xuất tới các tài nguyên dùng chung được quản lý bởi một tiến trình khác, vì vậy một số tiến trình vừa là tiến trình client vừa là tiến trình server Các tiến trình phát ra các yêu cầu tới các server bất kỳ khi nào chúng cần truy xuất tới một trong các tài nguyên của các server Nếu yêu cầu là đúng đắn thì server sẽ thực hiện hành động được yêu cầu và gửi một đáp ứng trả lời tới tiến trình client
Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ Quá trình trao đổi dữ liệu bao gồm:
- Truyền một yêu cầu từ tiến trình client tới tiến trình server
- Yêu cầu được server xử lý
Trang 12SV thực hiện: Nguyễn Hoàng Phương 11
- Truyền đáp ứng cho client
Mô hình truyền tin này liên quan đến việc truyền hai thông điệp và một dạng đồng bộ hóa
cụ thể giữa client và server Tiến trình server phải nhận được thông điệp được yêu cầu ở bước một ngay khi nó đến và hành động phát ra yêu cầu trong client phải được tạm dừng (bị phong tỏa) và buộc tiến trình client ở trạng thái chờ cho tớ khi nó nhận được đáp ứng do server gửi về
ở bước ba Mô hình client/server thường được cài đặt dựa trên các thao tác cơ bản là gửi (send)
và nhận (receive):
- Client: Máy khách trên mạng, chứa các chương trình Client
- Server: Máy phục vụ-Máy chủ Chứa các chương trình Server, tài nguyên (tập tin, tài liệu ) dùng chung cho nhiều máy khách Server luôn ở trạng thái chờ yêu cầu và đáp ứng yêu cầu của Client
2.2 Giao thức TCP/IP
TCP/IP là tên chung cho một tập hợp hơn 100 giao thức được sử dụng để kết nối các máy tính vào mạng, trong đó hai giao thức chính là TCP (Transmission Control Protocol) và IP (Internet Protocol)
Trong phạm vi Internet, thông tin không được truyền tải như một dòng riêng biệt từ máy tính này tới máy tính khác Thay vào đó, dữ liệu được chia thành những gói nhỏ gọi là packet Các packet này được gửi trên mạng máy tính Công việc của IP là chuyển chúng đến các máy tính ở xa Tại trạm cuối, TCP nhận các packet và kiểm tra lỗi Nếu một lỗi xuất hiện, TCP yêu cầu gói riêng biệt đó phải được gửi lại Chỉ khi tất cả các packet đã nhận được là đúng, TCP
sẽ sử dụng số thứ tự để tạo lại thông tin ban đầu
Giao thức IP là một giao thức hướng dữ liệu được sử dụng bởi các máy chủ nguồn và đích để truyền dữ liệu trong một liên mạng chuyển mạch gói Dữ liệu trong một liên mạng IP được gửi theo các khối được gọi là các gói (packet hoặc datagram) Cụ thể, IP không cần thiết lập các đường truyền trước khi một máy chủ gửi các gói tin cho một máy khác mà trước đó nó chưa từng liên lạc với
Giao thức IP rất thông dụng trong mạng Internet công cộng ngày nay Giao thức tầng mạng thông dụng nhất ngày nay là IPv4; đây là giao thức IP phiên bản 4 IPv6 được đề nghị sẽ
kế tiếp IPv4: Internet đang hết dần địa chỉ IPv4, do IPv4 sử dụng 32 bit để đánh địa chỉ (tạo được khoảng 4 tỷ địa chỉ); IPv6 dùng địa chỉ 128 bit, cung cấp tối đa khoảng 3.4×1038 địa chỉ Giao thức TCP là một trong các giao thức cốt lõi của bộ giao thức TCP/IP Sử dụng TCP, các ứng dụng trên các máy chủ được nối mạng có thể tạo các "kết nối" với nhau, mà qua đó chúng có thể trao đổi dữ liệu hoặc các gói tin Giao thức này đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng thứ tự TCP còn phân biệt giữa dữ liệu của nhiều ứng dụng (chẳng hạn, dịch vụ Web và dịch vụ thư điện tử) đồng thời chạy trên cùng một máy chủ
Trang 13Trong bộ giao thức TCP/IP, TCP là tầng trung gian giữa giao thức IP bên dưới và một ứng dụng bên trên Các ứng dụng thường cần các kết nối đáng tin cậy kiểu đường ống để liên lạc với nhau, trong khi đó, giao thức IP không cung cấp những dòng kiểu đó, mà chỉ cung cấp dịch vụ chuyển gói tin không đáng tin cậy TCP làm nhiệm vụ của tầng giao vận trong mô hình OSI đơn giản của các mạng máy tính
2.3 Socket
Trong hệ thống mạng máy tính tồn tại những mô hình tham chiếu có kiến trúc phần tầng (OSI, TCP/IP…) nhằm hỗ trợ chức năng trao đôi thông tin giữa các ứng dụng ở nhiều máy tính khác nhau
Hình 2: Giao tiếp Socket, tầng làm việc trong mô hình OSI và TCP/IP
Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu trên internet Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều, hay còn gọi là two-way communication để kết nối 2 process trò chuyện với nhau Điểm cuối (endpoint) của liên kết này được gọi là socket
2.3.1 Khái quát về Socket
Như chúng ta đã biết kết nối URLs và URL cung cấp cho chúng ta một cơ cấu để truy xuất vào các tài nguyên trên Internet ở một mức tương đối cao, nhưng đôi khi chương trình của chúng ta lại yêu cầu một giao tiếp ở tầng mạng mức thấp.Ví dụ khi chúng ta viết một ứng dụng client-server
Trong một ứng dụng client-server thì phía server sẽ cung cấp một số dịch vụ, như: xử lí
cơ sở dữ liệu, các yêu cầu bên phía client đưa ra, sau đó sẽ gửi lại cho phía client Sự giao tiếp như vậy gọi là tin cậy bởi vì dữ liệu sẽ không bị mất mát, sai lệch trong quá trình truyền, server gửi cho client thông điệp gì thì phía client sẽ nhận được thông điệp nguyên như vậy Giao thức TCP sẽ cung cấp cho chúng ta một cách thức truyền tin cậy Để có thể nói chuyện được trên
Trang 14SV thực hiện: Nguyễn Hoàng Phương 13
TCP thì chương trình client và chương trình server phải thiếp lập một đường truyền, và mỗi chương trình sẽ phải kết nối lại với socket là điểm cuối để kết nối, client và server muốn nói chuyện với nhau thì sẽ phải thông qua socket, mọi thông điệp sẽ phải đi qua socket Chúng ta
cứ mường tượng socket ở đây là một cái cửa mọi người muốn đi ra hay đi vào đều phải thông qua cái cửa này
2.3.2 Cơ chế Socket
Một socket là một điểm cuối của thông tin hai chiều liên kết giữa hai chương trình đang chạy trên mạng Những lớp socket được dùng để đại diện cho kết nối giữa một chương trình client và một chương trình server Trong Java gói Java.net cung cấp hai lớp Socket và ServerSocket để thực hiện kết nối giữa client và server
Thông thường thì server sẽ chạy trên một máy đặc biệt và có một socket giới hạn trong
1 Port number đặc biệt
Phía client: client được biết hostname của máy mà server đang chạy và port number mà server đang lắng nghe Để tạo một yêu cầu kết nối client sẽ thử hẹn gặp server ở trên máy của server thông qua port number Client cũng cần xác định chính nó với server thông qua local port number
Nếu thông tin đúng thì server sẽ đồng ý kết nối Khi đồng ý kết nối thì server sẽ tạo ra một socket mới để nói chuyện với client và cũng tạo ra một socket khác để tiếp tục lắng nghe 2.3.3 Mô hình truyền tin Stream socket
Hình 3: Mô hình truyền tin Stream Socket
Trang 15Hình 4 : Mô hình tương tác giữa client/server qua socket TCP
Một socket có thể thực hiện 7 thao tác cơ bản:
- Kết nối với một máy ở xa
- Chấp nhận liên kết từ các máy ở xa trên cổng đã được gán
Lớp Socket của Java được sử dụng bởi cả client và server, có các phương thức tương ứng với bốn thao tác đầu tiên Ba thao tác cuối chỉ cần cho server để chờ các client liên kết với chúng Các thao tác này được cài đặt bởi lớp ServerSocket Các socket cho client thường được sử dụng theo mô hình sau:
- Một socket mới được tạo ra bằng cách sử dụng hàm Socket()
- Socket cố gắng liên kết với một host ở xa
Trang 16SV thực hiện: Nguyễn Hoàng Phương 15
- Mỗi khi liên kết được thiết lập, các host ở xa nhận các luồng vào và luồng ra từ socket, và
sử dụng các luồng này để gửi dữ liệu cho nhau Kiểu liên kết này được gọi là song công (full-duplex) - các host có thể nhận và gửi dữ liệu đồng thời Ý nghĩa của dữ liệu phụ thuộc vào giao thức
- Khi việc truyền dữ liệu hoàn thành, một hoặc cả hai phía ngắt liên kết
Giao tiếp giữa client và server:
- Server: (chỉ chạy một lần):
+ Server phải chạy trước
+ Server phải tạo một socket để lắng nghe và chấp nhận kết nối từ client
- Client: (có thể chạy nhiều lần):
+ Khởi tạo TCP socket
+ Xác định địa chỉ IP, Port number của server
+ Thiết lập kết nối đến server
- Khi server nhận yêu cầu kết nối, nó sẽ chấp nhận yêu cầu và khởi tạo socket mới để giao tiếp với client
2.3.4 Một số hàm cơ bản trong socket
* Class mô tả về socket:
- Tạo một socket:
+ public Socket(String host, int port) throws UnknownHostException, IOException
+ public Socket(InetAddress host, int port) throws IOException
+ public Socket(String host, int port, InetAddress localAddress, int localPort) throws
IOException
+ public Socket(InetAddress host, int port, InetAddress localAddress, int localPort)
throws IOException
+ public Socket()
- Lấy thông tin về một socket:
+ public void connect(SocketAddress host, int timeout) throws IOException
+ InetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến
+ int getPort() : trả về địa chỉ mà socket kết nối đến
+ InetAddress getLocalAddress() : trả về địa chỉ cục bộ
+ int getLocalPort() : trả về địa chỉ cục bộ
- Sử dụng Streams:
+ public OutputStream getOutputStream() throws IOException: Trả về một output stream cho việc viết các byte đến socket này