Mô hình Client-Server sử dụng Socket ở chế độ không nối kết (UDP)
2.1. Viết dưới dạng đơn giản UDP client
Yêu cầu: Viết chương trình phía client cho phép gởi một thông điệp đến máy chủ bất kỳ.
Hướng dẫn: Mở Visual Studio .NET, tạo một Project mới, chọn Visual C# projects, và sau đó chọn Windows Application. Đặt tên là “UDP Client” và nhấn OK.
Thiết kế form cho chương trình như hình sau. Đặt tên cho nút button là button1 và hộp văn bản textbox là tbHost.
Hình 3.4 Giao diện UDP Client Kích chọn nút button và gõ đoạn lệnh sau:
private void button1_Click(object sender, System.EventArgs e) {
UdpClient udpClient = new UdpClient(); udpClient.Connect(tbHost.Text, 8080);
Byte[] sendBytes = Encoding.ASCII.GetBytes("Hello World?"); udpClient.Send(sendBytes, sendBytes.Length);
}
Cần bổ sung các namespace sau vào trong chương trình using System.Net;
using System.Net.Sockets; using System.Text;
using System.IO;
Nhấn F5 để thực thi chương trình, ta có kết quả như hình 3.5
2.2. Viết dưới dạng đơn giản UDP server
Yêu cầu: Viết chương trình phía server để nhận và hiển thị thông điệp được gởi tới từ chương trình UDP client ở trên.
Hình 3.5 Giao diện UDP Server Đặt tên cho list box là lbConnections.
Ở đây, chúng ta bắt đầu xây dựng hai luồng (thread) cho chương trình. Đầu tiên là luồng quản lý dữ liệu được gởi đến, mã nguồn chương trình như sau:
public void serverThread() {
UdpClient udpClient = new UdpClient(8080); while(true)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any,0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); string returnData = Encoding.ASCII.GetString(receiveBytes); lbConnections.Items.Add(RemoteIpEndPoint.Address.ToString()
+ ":" + returnData.ToString() );
} }
Viết code cho sự kiện Form load
private void Form1_Load(object sender, System.EventArgs e){ Thread thdUDPServer = new
Thread(new ThreadStart(serverThread)); thdUDPServer.Start();
}
Thực thi chương trình: Để kiểm tra kết quả của chương trình, cài đặt hai chương trình UDP client và UDP server trên hai máy khác nhau có kết nối mạng. Trên chương trình UDP client nhập vào địa chỉ IP của server. Sau khi bấm nút gởi, kết quả sẽ được hiển thị trên chương trình UDP server.