1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu và xây dựng hệ thống server chat multi client bằng ngôn ngữ lập trình java

100 19 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Và Xây Dựng Hệ Thống Server Chat Multi Client Bằng Ngôn Ngữ Lập Trình Java
Tác giả Bùi Thị Kiều
Người hướng dẫn TS. Lê Văn Minh
Trường học Trường Đại Học Vinh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo Cáo Đồ Án Tốt Nghiệp
Năm xuất bản 2016
Thành phố Nghệ An
Định dạng
Số trang 100
Dung lượng 1,33 MB

Cấu trúc

  • 1. Lý do chọn đề tài (7)
  • 2. Mục tiêu của đề tài (7)
  • 3. Công nghệ sử dụng (7)
  • Chương 1. KIẾN THỨC CĂN BẢN (8)
    • 1.1. Mạng máy tính (8)
      • 1.1.1 Định nghĩa về mạng máy tính (8)
      • 1.1.2 Phân loại mạng máy tính (8)
      • 1.1.3 Giao thức mạng (9)
      • 1.1.4 Các dịch vụ mạng (9)
      • 1.1.5 Mô hình hoạt động của mạng máy tính (11)
      • 1.1.6. Một số giao thức điều khiển truyền dữ liệu (12)
    • 1.2. Giới thiệu ngôn ngữ lập trình java (13)
      • 1.2.1. Một số tính chất của java (14)
      • 1.2.2. Các kiểu ứng dụng trong Java (15)
      • 1.2.3. Lập trình hướng đối tượng trong Java (16)
      • 1.2.4. File và I/O trong Java (18)
      • 1.2.5. Lập trình giao diện với Swing (24)
    • 1.3. Lý do chọn Java làm ngôn ngữ lập trình của đồ án (26)
  • Chương 2. HỆ THỐNG CHAT (28)
    • 2.1. Các kĩ thuật sử dụng (28)
      • 2.1.1. RMI và kĩ thuật lập trình phân tán đối tƣợng (28)
    • 2.2. Giao thức UDP (31)
      • 2.2.1. Tổng quan về giao thức UDP (31)
      • 2.2.2. Mô hình truyền thông UDP client/server (32)
      • 2.2.3. Lập trình ứng dụng UDP trong java (33)
  • Chương 3. MÔ HÌNH VÀ MỘT SỐ GIAO DIỆN CHƯƠNG TRÌNH PHÍA CLIENT VÀ SERVER (35)
    • 3.1. Phân tích và đặc tả yêu cầu (35)
      • 3.1.1. Thu thập yêu cầu (35)
    • 3.2. Phân tích hệ thống (36)
      • 3.2.1. Sơ đồ ngữ cảnh (36)
      • 3.2.2. Biểu đồ dòng dữ liệu (36)
      • 3.2.3. Thiết kế cơ sở dữ liệu (37)
    • 3.3. Use case tổng quát (37)
    • 3.4. Sơ đồ tiến trình (38)
      • 3.4.1. Đăng ký tài khoản (38)
      • 3.4.2. Đăng nhập (39)
      • 3.4.3. Thoát (40)
      • 3.4.4. Gửi tin nhắn (41)
      • 3.4.5. Gửi tập tin (42)
      • 3.4.6. Thay đổi trạng thái online/ offline (43)
      • 3.4.7. Xem nhật ký trò chuyện (44)
    • 3.5. Thiết kế giao diện chương trình (45)
      • 3.5.1. Đăng ký, đăng nhập, đăng xuất (45)
      • 3.5.2. Danh sách bạn bè online (47)
      • 3.5.3. Chức năng online, offline (47)
      • 3.5.4. Trò chuyện (48)
      • 3.5.5. Nhận/Gửi tệp tin (48)
  • KẾT LUẬN (51)
  • TÀI LIỆU THAM KHẢO (52)

Nội dung

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

Ngày đăng: 01/08/2021, 10:57

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w