Mục tiêu của đề tài
Khái niệm lập trình hướng đối tượng và phân tích bài toán là rất quan trọng trong việc xây dựng ứng dụng Việc nắm rõ cơ chế phân tán RMI sẽ giúp phát triển một ứng dụng chat hiệu quả trong mạng LAN.
Công nghệ sử dụng
Đồ án được thiết kế theo phương pháp lập trình hướng đối tượng, bằng ngôn ngữ lập trình Java Sử dụng Netbeans để lập trình chương trình
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT i
KIẾN THỨC CĂN BẢN
Mạng máy tính
1.1.1 Định nghĩa về mạng máy tính
Mạng máy tính là tập hợp các máy tính được kết nối thông qua các đường truyền, cho phép chúng trao đổi thông tin với nhau Đường truyền có thể là thiết bị truyền dẫn có dây hoặc không dây, bao gồm cáp đồng trục, cáp xoắn, cáp quang, dây điện thoại và sóng vô tuyến.
Các đường truyền dữ liệu tạo nên cấu trúc mạng
1.1.2 Phân loại mạng máy tính
Với sự phát triển mạnh mẽ của mạng máy tính và sự đa dạng trong các ứng dụng hiện nay, việc phân loại mạng máy tính trở nên phức tạp hơn bao giờ hết.
Dựa vào phạm vi phân bố của mạng ta có thể phân ra các loại mạng nhƣ sau:
Mạng cục bộ LAN (Local Area Network) là một hệ thống kết nối các máy tính và thiết bị truyền thông trong một khu vực nhỏ, chẳng hạn như trong một tòa nhà cao ốc.
Mạng đô thị MAN (Metropolitan Area Network) tương tự như mạng LAN nhưng có phạm vi rộng hơn, bao phủ một thành phố hoặc quốc gia Mạng MAN kết nối các mạng LAN với nhau thông qua nhiều phương tiện truyền dẫn khác nhau như cáp quang, cáp đồng và sóng, cũng như sử dụng các phương thức truyền thông đa dạng.
Mạng diện rộng WAN (Wide Area Network) bao phủ các khu vực địa lý rộng lớn như quốc gia, lục địa hoặc toàn cầu Thông thường, mạng WAN được sử dụng bởi các công ty đa quốc gia và là nền tảng của mạng internet Với phạm vi rộng lớn, mạng WAN thường là sự kết hợp của nhiều mạng LAN.
MAN nối lại với nhau bằng các phương tiện như: vệ tinh, sóng viba, cáp quang, cáp điện thoại
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT ii
Hình 1.1: Phân loại mạng máy tính
- Mạng internet: Là trường hợp đặc biệt của mạng WAN, nó cung cấp dịch vụ toàn cầu như mail, web, chat, ftp và phục vụ cho mọi người
Giao thức mạng là tập hợp các quy tắc và quy ước cần thiết để trao đổi thông tin giữa các hệ thống máy tính hoặc thiết bị Trong số nhiều loại giao thức như Apple Talk và DLC, TCP/IP hiện đang là giao thức phổ biến nhất trong mạng máy tính.
The OSI (Open Systems Interconnection Reference Model) layers define a framework for protocol layers and their interactions When comparing OSI layers to a specific implementation, the TCP/IP protocol stack serves as a concrete example, consisting of four layers Notably, the IP protocol corresponds to layer 3 of the OSI model.
OSI là mô hình mạng, trong đó TCP và UDP hoạt động ở tầng 4 (tầng giao vận) Chúng đảm nhiệm các chức năng của tầng phiên, tầng trình diễn và tầng ứng dụng.
Router là thiết bị trung gian mạng, giúp kết nối nhiều mạng vật lý Một mạng với nhiều host có thể được chia thành các phần riêng biệt, gọi là subnet Các subnet mang lại nhiều ưu điểm cho việc quản lý và tối ưu hóa mạng.
Bùi Thị Kiều, lớp 52K2_CNTT iii, đã chỉ ra rằng hiệu năng mạng có thể được cải thiện bằng cách giảm broadcast, một thông điệp được gửi đến tất cả các nút trong mạng Việc hạn chế người dùng trong từng subnet cụ thể mang lại nhiều lợi ích về bảo mật Hơn nữa, các subnet nhỏ hơn sẽ dễ dàng quản lý hơn so với một mạng lớn.
Router không chỉ phục vụ trong mạng LAN mà còn đóng vai trò quan trọng trong mạng WAN Chúng nhận thông điệp và chuyển tiếp đến đích bằng cách xác định đường đi tốt nhất.
Router lưu giữ bảng định tuyến, liệt kê các cách kết nối giữa các mạng Mặc dù có nhiều đường đi từ mạng này đến mạng khác, chỉ có một con đường tối ưu được ghi trong bảng định tuyến Các router sử dụng giao thức định tuyến để phát hiện các router khác trên mạng và hỗ trợ trao đổi thông tin về các mạng liên kết với từng bộ định tuyến.
Độ đo router là thông tin mà bộ định tuyến thu thập về các đường đi giữa các mạng, bao gồm sự mất mát gói tin và thời gian truyền tin Thông tin này được sử dụng để tạo ra độ đo, tùy thuộc vào giao thức định tuyến, chẳng hạn như giao thức định tuyến vectơ khoảng cách và các giao thức như RIP (Routing Information Protocol) và IGRP (Interior Gateway Routing Protocol).
Các giao thức định tuyến sử dụng biến đếm để xác định số lượng router mà gói tin cần đi qua để đến đích, thường chọn các đường đi với ít router mà không chú trọng đến tốc độ và độ tin cậy Trong số đó, các giao thức định tuyến trạng thái liên kết, như OSPF (Open Shortest Path First), tính toán đường đi tốt nhất để tối ưu hóa hiệu suất mạng.
Shortest Path First (SPF) và BGP (Border Gateway Protocol) chú trọng đến các yếu tố như tốc độ, độ tin cậy và chi phí của tuyến đường Các giao thức định tuyến lai kết hợp giữa việc tính toán trạng thái liên kết và vectơ khoảng cách để tối ưu hóa quá trình định tuyến.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT iv
1.1.5 Mô hình hoạt động của mạng máy tính a Mô hình peer to peer
Hình 1.2: Mô hình peer to peer
Giới thiệu ngôn ngữ lập trình java
Java là ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6 năm 1995 và nhanh chóng trở thành công cụ ưa chuộng của lập trình viên Được phát triển dựa trên nền tảng của C và C++, Java sử dụng cú pháp của C và các đặc trưng hướng đối tượng của C++.
Java là một ngôn ngữ lập trình nhanh chóng, hiệu quả và độc lập với thiết bị, cho phép chạy trên nhiều loại CPU và trong các môi trường khác nhau.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT vii
1.2.1 Một số tính chất của java
Loại bỏ thao tác con trỏ, thao tác định nghĩa chồng toán tử
Không cho phép đa kế thừa mà sử dụng các giao diện
Không sử dụng lệnh “go to” cũng nhƣ file header(.h)
Loại bỏ cấu trúc “struct” cũng nhƣ “union”
Java là một ngôn ngữ lập trình thuần đối tượng, yêu cầu mọi chương trình được xây dựng dựa trên các đối tượng Khác với C/C++, trong Java, các hàm không thể tồn tại độc lập mà phải thuộc về các lớp.
Trong Java, các phương thức chỉ có thể được tạo ra trong các lớp cụ thể, không có chương trình con nào không gắn với đối tượng Ngoài ra, Java không hỗ trợ tính năng đa kế thừa cho các đối tượng, mà thay vào đó sử dụng giao diện để đạt được tính năng tương tự.
Độc lập phần cứng và hệ điều hành
Trình biên dịch Java chuyển đổi mã nguồn thành bytecode, cho phép chạy chương trình trên nhiều nền tảng khác nhau Khi thực thi, máy ảo Java sử dụng trình thông dịch để chuyển bytecode thành mã có thể chạy trên phần cứng tương ứng Nhờ đó, người dùng không cần biên dịch lại mã nguồn Java khi thay đổi phần cứng.
Java là ngôn ngữ chặt chẽ về kiểu dữ liệu
+ Kiểu dữ liệu phải khai báo tường minh
+ Java không sử dụng con trỏ và các phép toán con trỏ
+ Java kiểm tra tất cả các truy cập đến mảng, chuỗi khi thực thi để đảm bảo rằng các truy nhập đó không ra ngoài giới hạn kích thước
+ Quá trình cấp phát, giải phóng bộ nhớ đƣợc thực hiện tự động
Java cung cấp môi trường quản lý thực thi chương trình với nhiều mức để kiểm soát tính an toàn:
+ Ở mức thứ nhất, dữ liệu và các phương thức được đóng gói bên trong lớp
+ Ở mức thứ hai, trình biên dịch kiểm soát để đảm bảo mà là an toàn, và tuân theo các nguyên tắc của java
+ Ở mức thứ ba đƣợc đảm bảo bởi trình thông dịch Chúng kiểm soát xem bytecode có đảm bảo các quy tắc an toàn trước khi thực thi
+ Ở mức thứ tƣ kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT viii
Java đƣợc thiết kế để hỗ trợ các ứng dụng chạy trên mạng bằng các lớp mạng
Chương trình Java hỗ trợ giải pháp đa luồng (Multithreading) cho phép thực thi các công việc đồng thời và cung cấp cơ chế đồng bộ giữa các luồng Tính năng này giúp xây dựng các ứng dụng mạng hiệu quả hơn.
Java là một ngôn ngữ lập trình động, được phát triển để hoạt động hiệu quả trong các môi trường mở Các chương trình Java tích hợp nhiều thông tin thực thi, giúp kiểm soát và truy cập đối tượng trong quá trình chạy, từ đó cho phép liên kết mã động linh hoạt.
1.2.2 Các kiểu ứng dụng trong Java a Console Ứng dụng Console là ứng dụng nhập xuất ở chế độ văn bản tương tự như màn hình Console của hệ điều hành MS-DOS Các ứng dụng kiểu Console thường được sử dụng để minh họa các ví dụ cơ bản liên quan đến ngôn ngữ, các thuật toán và các chương trình ứng dụng không cần đến giao diện người dung đồ họa b Applet
Java Applet là ứng dụng có thể được nhúng và chạy trực tiếp trong trình duyệt web Gần đây, sự phát triển của các trình duyệt với khả năng lập trình bằng VB Script, HTML, XML và Java Script đã tạo ra sự cạnh tranh mạnh mẽ trong lĩnh vực này.
Microsoft và Sun đã làm cho Java Applet bị lu mờ c Desktop bằng AWT và JFC
Java đã phát triển các chương trình ứng dụng với giao diện người dùng đồ họa trực quan thông qua thư viện AWT và JFC, đồng thời cũng hỗ trợ việc xây dựng ứng dụng web hiệu quả.
Java cung cấp hỗ trợ mạnh mẽ cho phát triển ứng dụng web thông qua công nghệ J2EE (Java 2 Enterprise Edition) J2EE cho phép tạo ra các ứng dụng web hiệu quả, cạnh tranh không thua kém công nghệ NET của Microsoft Ứng dụng nhúng Java cũng được phát triển một cách linh hoạt và hiệu quả.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT ix
Công nghệ J2ME (Java 2 Platform, Micro Edition) được Sun phát triển nhằm hỗ trợ việc xây dựng các ứng dụng phần mềm nhúng J2ME tạo ra một môi trường cho phép các chương trình ứng dụng hoạt động trên các thiết bị cá nhân như điện thoại di động, máy tính bỏ túi PDA và Palm.
1.2.3 Lập trình hướng đối tượng trong Java
Lập trình hướng đối tượng có các khái niệm chủ chốt bao gồm:
- Đối tƣợng (object) a Đối tượng, lớp và thể hiện của lớp
Trong lập trình, đối tượng là một biểu diễn của thực thể trong thế giới thực, với các thuộc tính (fields) và hành vi riêng biệt Các thuộc tính xác định đặc điểm của đối tượng, trong khi hành vi thể hiện cách mà đối tượng tương tác với các đối tượng khác.
Lớp là một khuôn mẫu (Prototype) xác định các thuộc tính và phương thức chung cho tất cả các đối tượng thuộc cùng loại Mỗi đối tượng được coi là một thể hiện của lớp, hay nói cách khác, đối tượng là sản phẩm được tạo ra từ khuôn mẫu này.
Lớp là bộ gồm 3 phần
Variables: Thuộc tính của lớp (dữ liệu của đối tƣợng)
Thuộc tính của lớp là dữ liệu trình bày đặc trƣng các đặc điểm về một đối tƣợng
Methods: Phương thức của lớp chính (hành vi, tác động lên các dữ liệu của đối tƣợng)
Các đối tƣợng đƣợc xây dựng từ các lớp, gọi là các thể hiện của các lớp b Các đặc điểm của hướng đối tượng
- Là cơ chế giúp các đối tƣợng giấu đi các chi tiết cài đặt và phần dữ liệu cục bộ
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT x
- Đơn vị đóng gói cơ bản là class Một class định nghĩa hình thức của một đối tƣợng
- Một lớp bao gồm thành phần dữ liệu và thành phần xử lý
Trong Java, kế thừa cho phép tạo lớp mới từ lớp đã tồn tại, trong đó tất cả thuộc tính và phương thức của lớp cha sẽ được kế thừa sang lớp con Lớp cha được gọi là lớp gốc, trong khi lớp con là lớp mở rộng.
Lý do chọn Java làm ngôn ngữ lập trình của đồ án
Java là một ngôn ngữ lập trình hướng đối tượng thuần túy, nổi bật với nhiều ưu điểm như tính độc lập với nền tảng và bảo mật cao Được thiết kế từ đầu để phục vụ cho lập trình mạng, Java cho phép lập trình viên dễ dàng phát triển các ứng dụng mạng so với các ngôn ngữ lập trình khác.
So sánh Java với một ngôn ngữ phổ biến khác:
C# là ngôn ngữ lập trình hướng đối tượng do Microsoft phát triển, nổi bật với tính thuần nhất và trong sáng, đồng thời thực hiện hầu hết các đặc điểm của mô hình hướng đối tượng tương tự như Java.
C# là một ngôn ngữ lập trình mạnh mẽ, được biên dịch thành mã máy để hoạt động trên nền tảng NET, cung cấp nhiều đối tượng phong phú giúp giải quyết các vấn đề lập trình phổ biến Việc lập trình bằng C# giúp tiết kiệm thời gian và chi phí, đồng thời đảm bảo ứng dụng hoạt động một cách tin cậy Tuy nhiên, C# chỉ có thể chạy trên nền tảng NET.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xx
Java và C# là hai ngôn ngữ lập trình hướng đối tượng có cú pháp và cấu trúc đối tượng tương tự nhau, nhưng chúng khác biệt hoàn toàn về kiến trúc dữ liệu.
Java tiên phong trong việc sử dụng RMI (Remote Method Invocation), một kỹ thuật cài đặt đối tượng phân tán hiệu quả và linh hoạt, giúp giải quyết các vấn đề liên quan đến truyền thông client/server.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxi
HỆ THỐNG CHAT
Các kĩ thuật sử dụng
2.1.1 RMI và kĩ thuật lập trình phân tán đối tượng
Lập trình đối tượng phân tán đang trở thành một xu hướng quan trọng trong lĩnh vực công nghệ phần mềm Java, với khả năng hỗ trợ RMI (Remote Method Invocation), dẫn đầu trong việc phát triển các ứng dụng phân tán hiệu quả.
Method Innovation) - một kĩ thuật cài đặt các đối tƣợng phân tán vô cùng hiệu quả và linh động
Kỹ thuật RMI (Remote Method Invocation) cho phép các đối tượng trong Java giao tiếp và gọi phương thức từ xa, ngay cả khi mã lệnh của chúng nằm trên các máy khác nhau Thay vì gọi trực tiếp, RMI sử dụng một lớp trung gian để xử lý việc truyền thông giữa client và server, giúp giải quyết các vấn đề liên quan đến kết nối và tương tác giữa các hệ thống.
RMI (Remote Method Invocation) là cơ chế cho phép các đối tượng trong Java Virtual Machine (JVM) giao tiếp và gọi phương thức của nhau, ngay cả khi chúng tồn tại trên các máy ảo Java khác nhau Đối tượng mà phương thức được gọi từ xa được gọi là Remote Object RMI hoạt động bằng cách sử dụng các giao thức mạng để truyền tải các yêu cầu và phản hồi giữa các đối tượng, tạo điều kiện cho việc phát triển ứng dụng phân tán hiệu quả.
Các hệ thống sử dụng RMI để truyền thông được chia thành hai loại chính: Client và Server Trong đó, Server cung cấp dịch vụ RMI, còn Client thực hiện việc gọi các phương thức do Server cung cấp.
Server RMI cần phải đăng ký với một dịch vụ tìm kiếm, giúp các Client dễ dàng tìm thấy thông tin mà Server cung cấp hoặc tham khảo các dịch vụ khác.
RMI có một ứng dụng chạy nền gọi là rmiRegister, hoạt động độc lập với các chương trình RMI khác Ứng dụng này cho phép các đối tượng trên Server đăng ký tên của mình và sau khi hoàn tất việc đăng ký, nó sẽ chờ để thực hiện các lời gọi từ Client.
Hình 2.1: Nhiều dịch vụ đăng ký với một bộ đăng ký rmiRegister
RMI Server RMI Server er
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxii
Các đối tượng trên Client sẽ gửi những thông điệp tới những phương thức ở xa
Trước khi một phương thức ở xa được thực thi Client phải có tham chiếu của nó trên
Dịch vụ tìm kiếm trong bộ đăng ký RMI cho phép Client yêu cầu tên dịch vụ và nhận URL tương ứng Định dạng URL của RMI để đại diện cho đối tượng tham chiếu từ xa là: rmi://hostname:port/servicename, trong đó hostname là tên hoặc địa chỉ IP của Server, port là số hiệu cổng dịch vụ, và servicename là chuỗi mô tả dịch vụ Thông tin mạng luôn trong suốt với nhà phát triển, giúp việc làm việc với đối tượng từ xa trở nên đơn giản như làm việc tại máy cục bộ Điều này được thực hiện nhờ vào sự phân chia thông minh của hệ thống RMI thành hai thành phần: stub và skeleton.
Hình 2.2: Đối tượng stub gọi đối tượng skeleton
Tại RMI Server, đối tượng skeleton đảm nhận vai trò lắng nghe và chuyển tiếp các yêu cầu đến dịch vụ RMI Sau khi nhà phát triển thiết lập một giao diện, skeleton sẽ xử lý các yêu cầu từ phía khách hàng.
RMI yêu cầu người dùng phải định nghĩa rõ ràng giao diện mà đối tượng sẽ sử dụng Đối tượng được định nghĩa này được gọi là đối tượng skeleton Kiến trúc chương trình RMI bao gồm các thành phần chính hỗ trợ việc giao tiếp giữa các đối tượng từ xa.
Kiến trúc một chương trình theo cơ chế RMI được mô tả như hình sau:
Hình 2.3: Kiến trúc chương trình kiểu RMI
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxiii
+ Server là chương trình cung cấp các đối tượng có thể gọi từ xa
+ Client là chương trình có tham chiếu đến các phương thức của các đối tượng ở xa trên Server
+ Stub chứa các tham chiếu đến các phương thức ở xa trên Server
+ Skeleton đón nhận các tham chiếu từ Stub để kích hoạt phương thức tương ứng trên Server
+ Remote Reference Layer là hệ thống truyền thông của RMI
+ Transport là tầng giao vận đƣợc dựa trên giao thức TCP/IP giữa các máy trong mạng
Kiến trúc phân tầng cho phép mỗi tầng trong hệ thống có thể được phân cấp hoặc thay thế mà không làm ảnh hưởng đến các phần còn lại Điều này tạo ra sự linh hoạt và khả năng mở rộng cho ứng dụng, đặc biệt trong các cơ chế liên quan đến RMI.
Trong một ứng dụng phân tán cần có các cơ chế sau:
+ Cơ chế định vị đối tƣợng ở xa (Lacate remote objects)
+ Cơ chế giao tiếp với các đối tƣợng ở xa (Communicate with remote objects)
+ Tải các lớp danh bytecodes cho các lớp mà nó đƣợc chuyển tải qua lại giữa các máy ảo e Các đặc tính của RMI
RMI là mô hình đối tƣợng phân tán của Java, nó giúp cho việc truyền thông giữa các đối tƣợng phân tán đƣợc dễ dàng hơn
- RMI là API ( Application Programming Interface) bậc cao đƣợc xây dựng dựa trên lập trình Socket
RMI cho phép truyền dữ liệu giữa các đối tượng trên các hệ thống máy tính khác nhau và triệu gọi các phương thức từ xa trên các đối tượng.
- Việc truyền dữ liệu giữa các máy khác nhau đƣợc xử lý một cách trong suốt bởi máy ảo Java (Java virtual machine)
- Tương tự như mô hình Client/Server, RMI vẫn duy trì khái niệm của
Client/Server, tuy nhiên cách tiếp cận của RMI linh hoạt hơn, mềm dẻo hơn so với mô hình Client/Server
Một trong những lợi ích quan trọng nhất của RMI là cơ chế callback, cho phép Server gọi các phương thức trên Client một cách hiệu quả Cơ chế này hỗ trợ vận hành ứng dụng theo mô hình RMI, giúp tối ưu hóa quá trình giao tiếp giữa Server và Client.
Tiến trình vận hành của một ứng dụng client/server theo cơ chế RMI diễn ra nhƣ sau:
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxiv
Bước 1: Server tạo ra các Remote object cùng với các Stub va Skeleton của chúng
Bước 2: Server sử dụng lớp Naming để đăng ký tên cho một remote object
Bước 3: Naming đăng ký stub của remote object với registry server
Bước 4: Registry server sẵn sàng cung cấp tham chiếu đến
Bước 5: Client yêu cầu Naming định vị Remote object qua tên đã được đăng ký với dịch vị tên
Bước 6: Naming tải stub của remote object từ tên dịch vụ mà remote object đã đăng ký về client
Bước 7: Cài đặt đối tượng stub và trả về tham chiếu remote object cho client.
Giao thức UDP
2.2.1 Tổng quan về giao thức UDP
UDP (Giao thức Datagram Người dùng) là một giao thức không kết nối, cho phép gửi gói dữ liệu độc lập, được gọi là datagram, từ máy tính này đến máy tính khác mà không đảm bảo rằng dữ liệu sẽ đến nơi.
UDP là giao thức đơn giản ở tầng giao vận, dựa trên nền giao thức IP
Dịch vụ không liên kết trên tầng giao vận cung cấp tốc độ nhanh và hỗ trợ kết nối một – nhiều, phù hợp cho cả datagram multicast và unicast.
- Hoạt động của giao thức UDP
+ UDP thêm vào datagram một header (8 byte): số hiệu cổng nguồn, đích, tổng chiều dài dữ liệu và thông tin checksum
- Nhƣợc điểm của giao thức UDP:
+ Thiếu các tín hiệu bắt tay, phía gửi dữ liệu không biết datagram đã đến đích hay chƣa
+ Không hỗ trợ các phiên liên kết
+ Không đảm bảo thứ tự đúng khi các gói tin đến đích
+ UDP có tính bảo mật thấp hơn TCP, các gói tin của UDP thường bị chặn bởi firewall và router
+ Không có kiểm soát luồng: một ứng dụng UDP đƣợc thiết kế tốt có thể làm giảm băng thông của mạng
- Các ƣu điểm của UDP:
- Không cần thiết lập liên kết
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxv
- Kích thước header nhỏ UDP chỉ có 8 byte header cho mỗi đoạn, ngược lại
TCP cần các header 20 byte, vì vậy sử dụng băng thông thấp hơn
- UDP thường được sử dụng khi:
+ Kích thước datagram nhỏ và trình tự đoạn là không quan trọng
+ Không cần thiết lập liên kết
+ Ứng dụng không gửi các dữ liệu quan trọng
+ Không cần truyền lại gói tin
+ Băng thông của mạng đóng vai quan trọng
2.2.2 Mô hình truyền thông UDP client/server
1 Receiver tạo một UDP socket, gán với một cổng port
2 Sender tạo một UDP socket, gán với bất kỳ port cục bộ nào
3 Sender gọi phương thức send() của socket thêm vào địa chỉ IP, số hiệu port máy đích dữ liệu gửi
4 UDP layer tạo một gói tin UDP và đưa các trường thông tin vào
5 IP layer tạo một IP packet điền địa chỉ IP nguồn, đích vào và đóng gói UDP socket
6 IP layer chuyển packet tới một router
7 Mỗi router định tuyến IP packet
Well-know port Socket() sendTo() receiverFrom ()
Block until datagram receivef from client sendTo()
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxvi
8 Tại nơi nhận, IP layer mở gói IP packet để lấy UDP packet
9 UDP layer vào hàng đợi của socket liên quan đến destination port
10 Receiver gọi phương thức receiver() trên socket của nó và nhận nội dung packet
2.2.3 Lập trình ứng dụng UDP trong java
Tạo ứng dụng UDP trong java cần có 2 lớp là DatagramPacket và
DatagramPacket: đóng gói các byte dữ liệu vào các gói tin UDP datagram
(hay mở datagram khi nhận)
DatagramSocket: Gửi và nhận các gói tin
- Lớp DatagramPacket: truyền nhận dữ liệu dưới dạng gói tin
Hàm tạo và các phương thức:
DatagramSocket(): Tạo đối tƣợng socket sử dụng giao thức UDP
DatagramSocket(int port): tạo đối tƣợng socket và kết nối đến số hiệu cổng port
Void send(DatagramPacket p): gửi gói tin p đi
Void receive(DatagramPacket p): nhận gói tin p về
- Lớp DatagramPacket: khai báo gói tin gửi đi trên mạng qua kết nối
Hàm tạo và các phương thức:
public DatagramPacket(byte buffer[], int len): tạo gói tin có dữ liệu chứa trong buffer, chiều dài len
public DatagramPacket(byte buffer[],int offset, int len)
public DatagramPacket(byte buffer[], int len, InetAddress dest, int port): tạo gói tin gửi đến địa chỉ dest với số hiệu cổng port
Public DatagramPacket(byte buffer[], int len, SocketAddress dest, int port)
Each constructor creates a new DatagramPacket to send to a different host The packet is fully populated with data, with a length defined by the byte length starting from the offset position or from position 0.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxvii
Kích thước gói tin phụ thuộc vào từng tình huống sử dụng Một trong những thách thức lớn nhất khi tạo đối tượng DatagramPacket là chuyển đổi dữ liệu thành mảng byte.
public InetAddress getAddress(): lấy địa chỉ chứa trong gói tin
public int getPort(): Lấy số hiệu cổng của remote host
byte[ ] getData(): Lấy dữ liệu trong gói tin
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxviii
MÔ HÌNH VÀ MỘT SỐ GIAO DIỆN CHƯƠNG TRÌNH PHÍA CLIENT VÀ SERVER
Phân tích và đặc tả yêu cầu
STT Câu hỏi Trả lời
Làm thế nào để tham gia trò chuyện với bạn bè
Bạn cần đăng ký một tài khoản để đăng nhập vào ứng dụng
Thông tin cần thiết để đăng ký
Tên tài khoản, mật khẩu, email, giới tính, họ tên, địa chỉ, số điện thoại
3 Làm sao có thể đăng nhập
Người dùng phải nhập đúng tên tài khoản và mật khẩu sử dụng
STT Câu hỏi Sử dụng phần mềm Hệ thống
Làm thế nào để nói chuyện với người khác
Từ danh sách bạn bè, chọn một người hoặc nhiều người để chat cùng một lúc
Làm thế nào để gửi một tập tin đến người khác
Người dùng chọn một tập tin muốn gửi trong máy tính để gửi đi
3 Xem nhật ký tin nhắn
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxix
Phân tích hệ thống
3.2.2 Biểu đồ dòng dữ liệu
Hệ thống server chat – multi client Đăng nhập Đăng ký
Gửi tập tin Chat Lịch sử trò chuyện
Nhập thông tin Trả về kết quả
Nhập thông tin Trả về kết quả Trả về kết quả Nhập thông tin
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxx
3.2.3 Thiết kế cơ sở dữ liệu
Use case tổng quát
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxi
Sơ đồ tiến trình
3.4.1 Đăng ký tài khoản Đăng ký check= null
Server điều hướng check server
Chọn server kết nối client kiểm tra tồn tại main program
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxii
3.4.2 Đăng nhập Đăng ký check= null
Server điều hướng check server
Chọn server kết nối client main program
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxiii
Xóa tất cả trong form
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxiv
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxv
Save file no yes no yes end
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxvi
3.4.6 Thay đổi trạng thái online/ offline
Main frame check fiend, update
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxvii
3.4.7 Xem nhật ký trò chuyện
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxviii
Thiết kế giao diện chương trình
3.5.1 Đăng ký, đăng nhập, đăng xuất
Hình 3.1: Giao diện đăng ký tài khoản
Kích hoạt chương trình Tạo tài khoản mới (dùng cho những người chưa có tài khoản trên hệ thống chat)
▪ Người sử dụng sẽ đăng ký một tài khoản với các thông tin trên:
- Tài khoản: là tên tài khoản để người sử dụng đăng nhập vào hệ thống
Sau khi tạo tài khoản, người dùng cần nhấn nút kiểm tra để xác định xem tên tài khoản đã được đăng ký hay chưa Nếu tên chưa được sử dụng, người dùng sẽ tiếp tục với các bước tiếp theo Ngược lại, nếu tên đã có, người dùng sẽ phải chọn một tên khác để đăng ký tài khoản mới.
Mật khẩu là chuỗi ký tự mà người dùng tạo ra để bảo vệ tài khoản của mình Để đăng nhập, người dùng cần nhập đúng cả tên tài khoản và mật khẩu Nếu một trong hai thông tin này không chính xác, người dùng sẽ phải nhập lại cho đến khi đúng mới có thể truy cập vào hệ thống.
- Họ tên: người dùng phải nhập đúng họ tên của mình
- Giới tính: người dùng kích vào giới tính chọn một trong hai trường Nam hoặc
- CMND: là số chứng minh nhân dân của người dùng gồm chín số Nếu nhập hơn sẽ báo lỗi
- Email: là địa chỉ thư điện tử của người dùng
- Điện thoại: người dùng nhập dãy mười chữ số, nếu sai chương trình sẽ báo lỗi
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xxxix
- Địa chỉ: mục này không bắt buộc, người dùng có thể nhập hoặc không
▪ Sau khi điền đầy đủ thông tin, người dùng bấm nút Đăng ký để nhập thông tin vào hệ thống
▪ Nút Làm mới sẽ làm mới tất cả thông tin trong bảng đăng ký
Hình 3.2: Giao diện đăng nhập
Khởi động chương trình - vào login
▪ Sau khi đã login vào hệ thống Mỗi người dùng có một tài khoản và có thể thấy được những người trong hệ thống đang online
Khi người dùng đăng nhập vào hệ thống, chương trình sẽ kiểm tra thông tin tài khoản Nếu thông tin sai, hệ thống sẽ thông báo lỗi Ngược lại, nếu thông tin đúng, chương trình sẽ kết nối người dùng vào hệ thống và cho phép bắt đầu trò chuyện.
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xl
3.5.2 Danh sách bạn bè online
Hình 3.3: Giao diện danh sách bạn bè
Hiển thị những người đang truy cập hệ thống, hoặc truy cập vào hệ thống ở chế độ Online
▪ Kích đúp chuột trái vào người muốn trò chuyện sẽ hiện lên khung trò chuyện
Hình 3.4: Giao diện khi thay đổi trạng thái online/offline
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xli
Khi bạn nhấp vào “Hệ thống” và chọn "Offline", trạng thái của bạn sẽ chuyển từ Online sang Offline, khiến người dùng khác không thể thấy bạn trong danh sách trực tuyến Tuy nhiên, bạn vẫn có thể tiếp tục trò chuyện với họ như bình thường.
Khi bạn nhấn vào "Hệ thống" và chọn "Offline", trạng thái của bạn sẽ chuyển từ Offline sang Online, giúp người dùng khác có thể nhìn thấy bạn trong danh sách trực tuyến của họ.
Hình 3.5: Giao diện trò chuyện
Chức năng này có tác dụng gửi tin nhắn tới những người bạn muốn
Khi bạn muốn trò chuyện với một người dùng, hãy kích đúp vào tên của họ Sau đó, nhập nội dung vào khung nhập bên dưới và nhấn nút Send hoặc phím Enter để gửi tin nhắn.
▪ Nút File sẽ cho phép người dùng gởi những file đi kèm bằng cách chọn đường dẫn một đến file và bấm Open
▪ Chức năng này có tác dụng gửi đi các tập tin, hình ảnh v.vv do người sử dụng chọn
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xlii
Sau khi chọn file muốn gửi chỉ cần kích vào file và bấm Open lập tức file sẽ đƣợc gửi đi
Hình 3.6: Giao diện gửi file
Chức năng này có tác dụng gửi đi các tập tin, hình ảnh v.vv do người sử dụng chọn
▪ Sau khi chọn file muốn gửi chỉ cần kích vào file và bấm Open lập tức file sẽ đƣợc gửi đi
Hình 3.7: Giao diện nhận file
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xliii
Chương trình sẽ hiện lên thông báo cho người nhận được file và thông báo
Bấm Yes để tải xuống và lưu file, bấm No sẽ hủy việc file trên
Người dùng chọn nơi lưu file và tên file lưu xuống
▪ Bấm Save để lưu file hoặc Cancel để hủy việc lưu xuống
SVTH: Bùi Thị Kiều - Lớp: 52K2_CNTT xliv