Trong lập trình mạng, các máy tính thường sử dụng các giao thức truyền thông như TCP/IP, UDP, HTTP, để đảm bảo rằng dữ liệu được gửi đi đúng đích, đúng thứ tự, và đảm bảo tính toàn vẹn..
Trang 3(Của giảng viên hướng dẫn)
Chữ ký của giảng viên hướng dẫn
Trang 4LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc đối với các thầy cô của trường Đại học Công nghệ thông tin và Truyền thông Việt – Hàn, đặc biệt là các thầy cô trong khoa Khoa học máy tính của trường đã tạo điều kiện cho em thực hiện đồ án Em cũng xin chân thành cảm ơn thầy THS.NGUYỄN THANH CẨM
đã nhiệt tình hướng dẫn em hoàn thành tốt đồ án này
Trong quá trình làm đồ án, khó tránh khỏi sai sót, rất mong các thầy cô bỏ qua.Đồng thời do trình độ lý luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót, em rất mong sẽ nhận được ý kiến đóng góp của thầy cô để chúng em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn các bài báo cáo khác trong những năm tới
Em xin chân thành cảm ơn!
Sinh Viên
Trang 5SỬ DỤNG GIAO THỨC TCP VÀ MÔ HÌNH P2P ĐỂ XÂY DỰNG ỨNG DỤNG CHAT VÀ CHIA SẺ FILE
MỤC LỤC
LỜI CẢM ƠN 1
MỤC LỤC 2
DANH MỤC HÌNH ẢNH 3
CHƯƠNG 1: TỔNG QUAN VỀ LẬP TRÌNH MẠNG 5
1.1 Sơ lược về lập trình mạng 5
1.1.1 Khái niệm về lập trình mạng 5
1.1.2 Các mô hình trong lập trình mạng 5
1.1.3 Socket 9
1.1.4 Giới thiệu SQL 11
1.2 Hướng tiếp cận của đề tài 13
1.3 Công nghệ được sử dụng 15
1.3.1 Ngôn ngữ sử dụng 15
1.3.2 Giao thức TCP 17
1.3.2 Socket trong java 17
1.4 Ý nghĩa lý luận và ý nghĩa thực tiễn của đề tài 18
CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG 20
2.1 Giải quyết bài toán 20
2.2 Sơ đồ 21
2.2.1 Sơ đồ USECASE 21
2.2.2 Sơ đồ CLASS 22
2.2.3 Sơ đồ trình tự 22
CHƯƠNG 3: CHƯƠNG TRÌNH ỨNG DỤNG 23
Trang 63.1 Phân tích yêu cầu đề tài 23
3.1.1 Chức năng 23
3.1.2 Yêu cầu phi chức năng 24
3.2 Một số hình ảnh về ứng dụng 25
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 27
5.1 Kết quả đạt được 27
5.2 Hướng nghiên cứu 28
TÀI LIỆU THAM KHẢO 29
Trang 7DANH MỤC HÌNH ẢNH
Hình 1 - Mô hình TCP/IP Model 4
Hình 2 - Mô hình OSI Model 5
Hình 3 - Mô tả socket 8
Hình 4 - Socket trong mô hình Client - Server 9
Hình 5 - Logo Xampp 11
Hình 6 - Biểu đồ use case tổng quát 19
Hình 7 - Biểu đồ lớp 20
Hình 7 - Biểu đồ trình tự 21
Hình 8 - Đăng Kí 24
Hình 9 - Đăng Nhập 24
Hình 10 - Giao diện chat 25
Hình 11 - Giao diện Profile 25
Trang 8Trong lập trình mạng, các máy tính thường sử dụng các giao thức truyền thông như
TCP/IP, UDP, HTTP, để đảm bảo rằng dữ liệu được gửi đi đúng đích, đúng thứ tự,
và đảm bảo tính toàn vẹn
1.1.2 Các mô hình trong lập trình mạng
Mô hình TCP/IP trong P2P:
* Mô hình TCP/IP là một trong những nền tảng cơ bản của lập trình
mạng Đối với hệ thống P2P, TCP/IP là giao thức cốt lõi để các máy (peers) kết nối và trao đổi dữ liệu trực tiếp với nhau mà không cần sự quản lý tập trung
Trang 9Hình 1 - Mô hình TCP/IP Model
- Chức năng các tầng trong mô hình TCP/IP khi triển khai hệ thống P2P:
+ Tầng 1: Tầng truy cập (Network Access Layer): Đây là nơi các peers
trong mạng P2P sử dụng các thiết bị vật lý như switch, card mạng, để kết nối Dữ liệu được truyền giữa các thiết bị sử dụng các giao thức ở tầng này
+ Tầng 2: Tầng mạng (Internet Layer): Trong P2P, tầng này đảm bảo rằng
các gói tin có thể được định tuyến qua các mạng khác nhau để đến đúng peerđích Các giao thức như IP được sử dụng để định vị và dẫn đường cho dữ liệu
+ Tầng 3: Tầng vận chuyển (Transport Layer): Đối với P2P, tầng này
chịu trách nhiệm quản lý kết nối giữa các peers Giao thức TCP thường được
sử dụng để đảm bảo truyền dữ liệu tin cậy giữa các peers Nếu kích thước dữ liệu lớn, tầng này sẽ chia nhỏ và sau đó tập hợp lại khi đến peer đích
Trang 10+ Tầng 4: Tầng ứng dụng (Application Layer): Trong hệ thống P2P, các
ứng dụng như chia sẻ tệp, chat, hoặc streaming sẽ hoạt động ở tầng này Các giao thức cụ thể như BitTorrent, Gnutella cho việc chia sẻ dữ liệu giữa các peers có thể được triển khai
*Mô hình OSI trong P2P:
-Mô hình OSI giúp phân tầng rõ ràng hơn về cách truyền tin giữa các peers trong mạng P2P Điều này giúp việc triển khai các dịch vụ và quản lý dữ liệu dễdàng hơn
Hình 2 - Mô hình OSI Model
Trang 11* Chức năng của từng tầng trong mô hình OSI khi triển khai hệ thống P2P:
- Tầng 1: Tầng vật lý (Physical Layer): Đối với P2P, tầng này đảm
bảo rằng dữ liệu có thể được truyền tải qua cáp mạng, wifi, hoặc bất
kỳ phương tiện vật lý nào khác Các tín hiệu điện và mã hóa được quy định tại đây
- Tầng 2: Tầng liên kết dữ liệu (Data-Link Layer): Tầng này sẽ xử
lý việc truyền dữ liệu giữa các peers trong cùng một mạng vật lý và phát hiện, xử lý lỗi Điều này rất quan trọng để duy trì tính toàn vẹn của dữ liệu trong mô hình P2P
- Tầng 3: Tầng mạng (Network Layer): Đây là nơi xử lý việc truyền
gói tin giữa các peers trên mạng Tầng này sẽ quyết định đường đi của
dữ liệu từ một peer đến peer khác trong mạng P2P
- Tầng 4: Tầng vận chuyển (Transport Layer): Giống như mô hình
TCP/IP, tầng vận chuyển trong OSI đảm bảo rằng dữ liệu giữa các peers được gửi và nhận một cách an toàn, không bị mất và đúng thứ tự
- Tầng 5: Tầng giao dịch (Session Layer): Tầng này giúp quản lý
phiên giao dịch giữa các peers trong mạng P2P, đảm bảo rằng các phiên làm việc giữa các peers có thể được thiết lập và duy trì trong suốt quá trình trao đổi dữ liệu
Trang 12- Tầng 6: Tầng trình bày (Presentation Layer): Khi các peers sử
dụng những định dạng dữ liệu khác nhau, tầng này sẽ chuyển đổi dữ liệu sang định dạng chung để chúng có thể hiểu và trao đổi với nhau
- Tầng 7: Tầng ứng dụng (Application Layer): Đây là tầng mà các
ứng dụng P2P hoạt động, như chia sẻ tệp, truyền phát video, hoặc nhắn tin trực tiếp Các dịch vụ mạng như BitTorrent, Skype là ví dụ của các ứng dụng ở tầng này trong mô hình P2P
* Một số mô hình ứng dụng mạng trong Java Swing:
- Java Swing trong phát triển ứng dụng được sử dụng để:
+ Thiết kế giao diện người dùng: Định nghĩa bố cục (layouts) và các thành
phần giao diện (UI) như JButton, JPanel, JLabel, JTextField, v.v
+ Quản lý sự kiện: Thực hiện các hành động khi người dùng tương tác với
các thành phần UI như nhấn nút, nhập văn bản, hoặc chọn từ danh sách
+ Cấu hình và quản lý tài nguyên: Sử dụng các đối tượng như
ResourceBundle để quản lý chuỗi ký tự, hình ảnh, và các tài nguyên khácnhằm tăng tính tái sử dụng và khả năng quản lý
+ Phân tách logic và giao diện: Với Java Swing, logic xử lý được tách
riêng khỏi giao diện, giúp dễ dàng bảo trì, phát triển, và tái sử dụng mãnguồn
Trang 13Hình 3 - Mô tả socket
Trang 14Socket được xem như điểm giao tiếp của ứng dụng với mạng, do đó chương trình client/server sẽ thực hiện hai thao tác cơ bản sau:
Để truyền dữ liệu, chương trình chỉ cần gửi dữ liệu vào socket
Để nhận dữ liệu, chương trình chỉ cần đọc dữ liệu từ socket
Có hai loại socket: socket nối với giao thức TCP còn được gọi là TCP socket, và tương tự như vậy socket nối với giao thức UDP được gọi là UDP socket.
Một TCP socket được xem như là điểm cuối của kênh kết nối hai chiều liên kết giữa hai chương trình trên mạng
Hình 4 - Socket trong mô hình Client - Server
Có thể nói một kênh kết nối giữa hai chương trình được thiết lập nhờ vào hai socketđược gắn ở hai chương trình Như hình vẽ trên, mỗi chương trình client và server đều có một socket được gắn vào nó để có thể truyền và nhận dữ liệu
1.1.4 Giới thiệu SQL
Giới thiệu về cơ sở dữ liệu sử dụng trong đồ án
Cơ sở dữ liệu là thành phần quan trọng giúp lưu trữ và quản lý thông tin trong các ứng
Trang 15dùng (như tài khoản, thông tin đăng nhập, các hoạt động), quản lý các giao dịch liênquan đến việc đăng ký môn học, hay lưu lại lịch sử tin nhắn, thông tin đăng ký nhómtrong chương trình chat.
Cơ sở dữ liệu quan hệ (RDBMS) như MySQL là một lựa chọn phổ biến, vì nó có khảnăng lưu trữ dữ liệu theo các bảng có quan hệ với nhau, hỗ trợ truy vấn mạnh mẽ vớingôn ngữ SQL, đồng thời có tính toàn vẹn và bảo mật cao MySQL là một hệ quản trị
cơ sở dữ liệu mã nguồn mở, được sử dụng rộng rãi nhờ tính linh hoạt, dễ triển khai vàtích hợp tốt với các ứng dụng Java
Thư viện JDBC để kết nối Java với MySQL
JDBC (Java Database Connectivity) là một thư viện trong Java, cung cấp giao diệntiêu chuẩn để kết nối và tương tác với cơ sở dữ liệu quan hệ, như MySQL JDBC chophép ứng dụng Java thực hiện các thao tác như kết nối đến cơ sở dữ liệu, thực hiện cáctruy vấn SQL, và thao tác với dữ liệu một cách dễ dàng
Trang 16- Statement: Đối tượng để thực thi các câu lệnh SQL, chẳng hạn như truy vấn, cậpnhật dữ liệu.
- ResultSet: Lưu trữ kết quả trả về từ một truy vấn SQL
- PreparedStatement: Cho phép thực hiện các truy vấn SQL với tham số, giúp cảithiện hiệu năng và bảo mật
JDBC giúp ứng dụng của bạn dễ dàng thao tác với cơ sở dữ liệu, từ việc thêm, sửa,xóa dữ liệu cho đến truy xuất thông tin cần thiết để thực hiện các chức năng như đăng
ký, đăng nhập, quản lý người dùng trong đồ án
Hình 5 - Logo Xampp
1.2 Hướng tiếp cận của đề tài
*Thiết kế và triển khai mô hình P2P:
Trang 17- Mô hình Peer-to-Peer (P2P) cho phép các máy tính (client) kết nối trực tiếp với
nhau mà không cần thông qua máy chủ trung gian Các máy tính trong mạng P2P
có thể vừa là máy gửi vừa là máy nhận dữ liệu, đảm bảo việc truyền tải tin nhắnhoặc file giữa các người dùng một cách hiệu quả
+ Sử dụng giao thức TCP để đảm bảo việc truyền dữ liệu không bị mất mát và giữ
được tính toàn vẹn
+ Các thành phần chính gồm: hệ thống gửi và nhận tin nhắn, hệ thống quản lýphiên kết nối giữa các peer, và chức năng gửi file trực tiếp giữa các người dùng
- Lựa chọn cơ sở dữ liệu SQLite:
+ Để lưu trữ và quản lý các dữ liệu liên quan đến lịch sử chat, danh bạ, hoặc file
đính kèm, cơ sở dữ liệu SQLite được sử dụng Nhờ tính linh hoạt và nhẹ nhàng,
SQLite phù hợp cho các ứng dụng có quy mô nhỏ và trung bình, đồng thời dễ dàngtích hợp trực tiếp vào ứng dụng mà không cần quản lý máy chủ riêng biệt
+ SQLite được dùng để lưu trữ cục bộ (local storage) thông tin người dùng và lịch
sử chat, giúp ứng dụng có thể hoạt động ngay cả khi không kết nối mạng và dễdàng đồng bộ khi mạng được khôi phục
* Giao tiếp và đồng bộ giữa các peer:
+ Ứng dụng sử dụng cơ chế TCP Socket để các client kết nối và giao tiếp trực tiếp
với nhau Mỗi peer có khả năng lắng nghe và xử lý nhiều kết nối đồng thời.+ Các tin nhắn và file được mã hóa trước khi truyền qua mạng, nhằm đảm bảo antoàn và bảo mật cho người dùng
Trang 18- Xây dựng giao diện người dùng:
+ Giao diện được xây dựng bằng Java Swing, cung cấp môi trường trực quan và
thân thiện với người dùng Giao diện sẽ bao gồm các chức năng chính như gửi tinnhắn, gửi file, thêm bạn bè, và quản lý lịch sử chat
+ Các tính năng như tạo và quản lý nhóm chat cũng được tích hợp, hỗ trợ việc kếtnối nhiều người dùng trong cùng một nhóm
ServerSocket: Dùng cho server để lắng nghe và chấp nhận kết nối từ client
thông qua một cổng (port) nhất định
Socket: Tạo kết nối giữa client và server, cho phép truyền dữ liệu hai chiều
giữa chúng
InetAddress: Để xử lý địa chỉ IP, cung cấp các phương thức để lấy địa chỉ IP
từ tên miền hoặc máy tính
DatagramSocket và DatagramPacket: Sử dụng trong giao tiếp UDP để gửi
Trang 19 InputStream và OutputStream: Được sử dụng để đọc và ghi dữ liệu theo
luồng byte
BufferedReader và PrintWriter: Hỗ trợ đọc và ghi dữ liệu theo định dạng ký
tự, giúp xử lý dữ liệu văn bản dễ dàng hơn
- Trong quá trình xây dựng ứng dụng, một số công nghệ và công cụ được sử dụng bao gồm:
+ Java Swing: Được sử dụng để xây dựng giao diện người dùng (UI) của
ứng dụng Java Swing hỗ trợ tạo các thành phần giao diện như bảng điều khiển, các nút bấm, các trường nhập liệu, và nhiều thành phần giao diện khácvới tính năng tương tác cao
+ Java Networking (Socket Programming): Được sử dụng để phát triển
các tính năng giao tiếp mạng giữa các client và server Với lập trình socket, ứng dụng có thể thực hiện giao tiếp P2P (Peer-to-Peer) hoặc mô hình Client-Server để trao đổi dữ liệu theo thời gian thực
+ MySQL: Cơ sở dữ liệu nhẹ được sử dụng để lưu trữ cục bộ thông tin
người dùng, tin nhắn, và các dữ liệu khác trong ứng dụng SQLite tích hợp
dễ dàng với Java thông qua các thư viện JDBC và không cần cài đặt máy chủriêng biệt
+ JDBC (Java Database Connectivity): Được sử dụng để kết nối và thực
hiện các thao tác truy vấn cơ sở dữ liệu SQLite JDBC hỗ trợ các thao tác thêm, sửa, xóa và truy vấn dữ liệu từ cơ sở dữ liệu
Trang 20+ Multi reading: Công nghệ đa luồng được áp dụng để xử lý đồng thời
nhiều kết nối giữa các người dùng trong mạng Mỗi client sẽ được xử lý trên một luồng riêng biệt, giúp hệ thống hoạt động ổn định và hiệu quả
+ File I/O: Được sử dụng để lưu trữ và quản lý các file liên quan đến tin
nhắn hoặc các tài liệu được gửi và nhận trong quá trình sử dụng ứng dụng
1.3.2 Giao thức TCP
- Đảm bảo độ tin cậy: TCP là một giao thức tin cậy, đảm bảo rằng tất cả dữ liệu gửi
đi từ một client sẽ được chuyển đến client khác mà không bị mất mát, sai thứ tự haylỗi dữ liệu Điều này rất cần thiết cho ứng dụng chat và chia sẻ file, nơi nội dung tinnhắn và file cần được truyền tải toàn vẹn
- Kết nối trực tiếp: TCP thiết lập một kết nối điểm-điểm, phù hợp cho mô hình P2P,
giúp client có thể giao tiếp trực tiếp mà không cần máy chủ trung gian
- Quản lý truyền tải file: TCP cũng hỗ trợ truyền file hiệu quả bằng cách phân mảnh
dữ liệu, đảm bảo file được gửi một cách liên tục và chính xác
1.3.2 Socket trong java
- Tạo và duy trì kết nối: Java cung cấp Socket và ServerSocket cho phép mỗi client
tạo kết nối trực tiếp với một client khác Socket là điểm cuối của kết nối giữa hai máy,
và ServerSocket giúp lắng nghe yêu cầu kết nối từ các client khác, giúp thiết lập vàduy trì phiên làm việc
- Truyền dữ liệu qua InputStream và OutputStream: Java Socket API cung cấp
Trang 21mạng Mỗi tin nhắn hoặc file đều được truyền như một chuỗi byte qua các luồng này,đảm bảo tính tương thích và hiệu quả.
- Xử lý đa luồng: Để mỗi client có thể lắng nghe và xử lý đồng thời nhiều yêu cầu,
Java Socket thường được kết hợp với đa luồng (Thread) Điều này cho phép các clientnhận và xử lý tin nhắn hoặc file từ nhiều kết nối cùng lúc mà không bị gián đoạn
1.4 Ý nghĩa lý luận và ý nghĩa thực tiễn của đề tài
Lập trình mạng là một công việc nhằm phát triển các ứng dụng doanh nghiệphoạt
động trên mạng Internet Theo đó, người lập trình cần viết ra một chươngtrìnhmạng để chạy những chương trình trên các máy tính khác nhau, giúp các nút mạngấychia sẻ dữ liệu, truyền tin an toàn, hiệu quả Nói dễ hiểu thì bản chất của lập trìnhmạng chính là sử dụng các công cụ lập trình để tạo ra một chương trình giúp các máytính giao tiếp với nhau Các công cụ ấy bao gồm:
+ Ngôn ngữ lập trình Java
*Ý nghĩa lý luận:
- Góp phần nghiên cứu về mô hình mạng P2P (Peer-to-Peer): Đề tài cung cấp
một cái nhìn sâu sắc về cách thức hoạt động của mô hình mạng P2P, từ việc thiết lập kết nối giữa các máy tính cho đến việc xử lý dữ liệu trực tiếp giữa các nút mạng
mà không cần thông qua máy chủ trung gian Qua đó, nó giúp tăng cường hiểu biết
về mạng phi tập trung và vai trò của các giao thức truyền thông như TCP trong việcđảm bảo tính toàn vẹn của dữ liệu
Trang 22- Ứng dụng cơ sở dữ liệu nhẹ trong lưu trữ thông tin: Việc sử dụng cơ sở dữ liệu SQLite trong hệ thống P2P chat minh chứng cho sự hiệu quả của các cơ sở dữ
liệu nhúng trong các ứng dụng nhỏ gọn, đặc biệt là những ứng dụng không yêu cầu máy chủ cơ sở dữ liệu mạnh mẽ Điều này giúp mở rộng kiến thức về việc lựa chọn
và sử dụng cơ sở dữ liệu phù hợp cho các hệ thống phân tán và ứng dụng di động
- Phân tích và triển khai cơ chế bảo mật dữ liệu: Đề tài tập trung nghiên cứu các
phương pháp bảo mật trong môi trường mạng P2P, từ việc mã hóa dữ liệu đến các
kỹ thuật bảo vệ phiên kết nối giữa các peer Điều này giúp đóng góp cho nghiên cứu về an ninh mạng, đặc biệt là trong các mô hình phi tập trung, nơi mà dữ liệu cần phải được bảo vệ trong suốt quá trình truyền tải
*Ý nghĩa thực tiễn:
- Ứng dụng trong việc xây dựng hệ thống chat phân tán: Hệ thống chat P2P là
một ứng dụng thực tiễn có thể triển khai trong nhiều tình huống khác nhau, từ các ứng dụng trò chuyện nhóm nhỏ, đến các hệ thống giao tiếp không cần máy chủ trung gian như trong các môi trường mạng cục bộ (LAN) hoặc các vùng không có kết nối Internet ổn định
- Giảm chi phí và tài nguyên khi xây dựng hệ thống mạng: Việc không cần sử
dụng máy chủ trung gian trong mô hình P2P giúp giảm thiểu chi phí về phần cứng
và tài nguyên mạng Điều này có ý nghĩa đặc biệt quan trọng đối với các tổ chức hoặc cá nhân muốn xây dựng các hệ thống giao tiếp với quy mô vừa và nhỏ mà không phải đầu tư lớn vào hạ tầng máy chủ
- Tăng cường bảo mật trong giao tiếp: Với việc mã hóa dữ liệu trực tiếp giữa các