24/05/2018, 19:26

Lớp UDP

Giao thức UDP (User Datagram Protocol hay User Define Protocol) là một giao thức phi kết nối (Connectionless) có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà không cần biết là bên đó đã sẵn sàng hay chưa ? (Nói cách khác là không cần ...

Giao thức UDP (User Datagram Protocol hay User Define Protocol) là một giao thức phi kết nối (Connectionless) có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà không cần biết là bên đó đã sẵn sàng hay chưa ? (Nói cách khác là không cần thiết lập kết nối giữa hai bên khi tiến hành trao đổi thông tin). Giao thức này không tin cậy bằng giao thức TCP nhưng tốc độ lại nhanh và dễ cài đặt. Ngoài ra, với giao thức UDP ta còn có thể gửi các gói tin quảng bá (Broadcast) cho đồng thời nhiều máy.

Trong .NET, lớp UDPClient (nằm trong System.Net.Sockets) đóng gói các chức năng của giao thức UDP.

  • đồng bộ : Synchronous
  • Không đồng bộ : Asynchronous

Chuyển đổi một xâu ký tự sang mảng byte:

Chuyển đổi mảng byte sang xâu ký tự:

Ví dụ tổng hợp 2 hàm chuyển đổi trên:

  1. Tạo một UDPClient gắn vào cổng 10 và Gửi một gói tin "Hello" tới một ứng dụng UDP khác đang chạy trên máy có địa chỉ là "127.0.0.1" và cổng 1000.

Ung dung A:

  1. Tạo một UDPClient gắn vào cổng 1000 và nhận dữ liệu từ ứng dụng khác gửi đến.

  1. Viết chương trình tổng hợp CHAT giữa hai máy dùng giao thức UDP

Mô tả giao diện:

Giao diện của ứng dụng A (Ứng dụng 1)

Giao diện của ứng dụng b (Ứng dụng 2)

Code cho mỗi ứng dụng là hoàn toàn giống nhau.

Lưu ý: Nếu 2 ứng dụng đặt trên 2 máy khác nhau thỡ chỳng ta cú thể đặt Remote Port và Local Port của hai ứng dụng giống nhau (Vỡ khụng bị xung đột).

Listing 1: Chương trình CHAT giữa hai ứng dụng

** Cõu hỏi: Trong sự kiện Dữ_Liệu_Về ta cú thể bỏ bớt tham số RemoteHost đi được không ? (Hay có thể tăng thêm được không ?)

Khi muốn gửi dữ liệu qua mạng bằng lớp UDPClient, ta theo cách đơn giản nhất như sau:

Khi nhận:

Dùng phương thức Receive để nhận dữ liệu về. Phương thức đòi hỏi ta phải chỉ ra là lấy về từ máy nào ? (mà đại diện là một IPEndPoint). Khi đó ta cần tạo một đối tượng IPEndPoint với địa chỉ và số hiệu cổng của máy chạy ứng dụng mà ta muốn nhận dữ liệu.

Phương thức này trả về cho ta dữ liệu ở dạng mảng byte, do vậy để chuyển sang dạng xâu ký tự thì cần dùng lớp Encoding để chuyển đổi.

Phương thức Receive làm việc ở chế độ đồng bộ (Tức là sẽ luôn “Blocking” khi chưa có dữ liệu nhận) do vậy thường ta sử dụng cơ chế đa tuyến để giải quyết trường hợp này. (Phần Receive sẽ được đặt trong một tuyến riêng biệt)

Bài tập:

Bài 1: Viết chương trình UDP đặt ở hai máy thực hiện công việc sau:

  • Khi một ứng dụng gửi xâu "OPEN#<Đường dẫn >" thì ứng dụng trên máy kia sẽ mở file nằm trong phần <đường dẫn>
  • Khi một ứng dụng gửi xâu "SHUTDOWN" thì ứng dụng kia sẽ tắt máy tính.
  • Khi một ứng dụng gửi xâu "RESTART" thì ứng dụng kia sẽ tắt khởi động lại máy tính.

Bài 2: Viết chương trình UDP (ứng dụng A) đặt trên một máy. thực hiện các công việc sau:

- Khi một ứng dụng (B) gửi một xâu chữ Tiếng Anh thì ứng A sẽ gửi trả lại nghĩa tiếng Việt tương ứng. Nếu từ Tiếng Anh không có trong từ điển (từ điển ở đây chỉ có 3 từ Computer, RAM, HDD) thì ứng dụng A gửi trả lại xâu "Not found".

…. → Viết các ứng dụng khác !

0