Đây là một dạng kiểm tra sever của bạn có hoạt động hay không nhé, nếu hoạt động thì nó sẽ kiểm tra và sẽ có những thông báo ngày giờ hệ thống cho mọi người kiểm tra chính xác nhất.
Video hướng dẫn từng bước.
Bây giờ ta tạo một file class có tên "UDPClient.cs" với source code như sau:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoUDPSocket { public partial class FrmClient : Form { private const int serverPort = 8888; private static IPAddress serverIP = IPAddress.Parse("127.0.0.1"); // địa chị của ip server public FrmClient() { InitializeComponent(); } private void btnGetTime_Click(object sender, EventArgs e) { // Khởi tạo đối tượng socket using (Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { try { // kết nối đến server IPEndPoint serverEndPoint = new IPEndPoint(serverIP, serverPort); clientSocket.Connect(serverEndPoint); // gởi yêu cầu lấy ngày giờ hệ thống đến server byte[] requestBytes = Encoding.UTF8.GetBytes("GET_TIME"); clientSocket.Send(requestBytes); // nhận dữ liệu từ server byte[] receiveBuffer = new byte[1024]; int receivedBytes = clientSocket.Receive(receiveBuffer); // hiển thị ngày giờ nhận được vào label string timeServer = Encoding.UTF8.GetString(receiveBuffer, 0, receivedBytes); lblReceiveTime.Text = timeServer; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } }
Ở source code Client.cs ở trên, chúng ta sử dụng lớp Socket để tạo một đối tượng socket UDP. Đầu tiên, chúng ta khởi tạo socket với các thông số AddressFamily.InterNetwork (IPv4), SocketType.Dgram (UDP), và ProtocolType.Udp. Sau đó, chúng ta kết nối tới server bằng cách sử dụng phương thức Connect và truyền địa chỉ IP và cổng của server.
Sau khi kết nối thành công, chúng ta gửi yêu cầu lấy ngày giờ hệ thống tới server bằng cách chuyển chuỗi "GET_TIME" thành mảng byte và gửi đi qua socket sử dụng phương thức Send.
Tiếp theo, chúng ta chuẩn bị một bộ đệm (receiveBuffer) để nhận dữ liệu từ server. Khi dữ liệu được nhận về, chúng ta chuyển đổi từ mảng byte sang chuỗi sử dụng mã hóa ASCII và hiển thị nó trên màn hình.
Lưu ý rằng trong ví dụ này, địa chỉ IP của server được đặt là "127.0.0.1" và cổng là 8888. Bạn có thể thay đổi các giá trị này tùy theo cài đặt của server UDP thực tế.
Source code Server.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace Server { internal class Program { private const int serverPort = 8888; static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; // allow utf-8 using (var serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { try { // Assign Ipadress and port for server IPEndPoint serverEndpoint = new IPEndPoint(IPAddress.Any, serverPort); serverSocket.Bind(serverEndpoint); Console.WriteLine($"Đợi yêu cầu từ client..., server listen port: {serverPort}"); while (true) { // nhận yêu cầu từ client. byte[] receiveBuffer = new byte[1024]; EndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0); int receivedBytes = serverSocket.ReceiveFrom(receiveBuffer,ref clientEndPoint); // chuyển đổi yêu cầu từ mảng byte sang chuỗi text string requestString = Encoding.UTF8.GetString(receiveBuffer,0, receivedBytes); // Ghi nhận yêu cầu client từ IP string clientIP = ((IPEndPoint)clientEndPoint).Address.ToString(); Console.WriteLine("Nhận yêu cầu từ client IP: " + clientIP); if (requestString == "GET_TIME") { // lấy ngày hệ thống hiện tại string timeString = "Ngày giờ hệ thống từ server: " + DateTime.Now.ToString(); // Gởi ngày giờ hệ thống về cho Client byte[] responseBytes = Encoding.UTF8.GetBytes(timeString); serverSocket.SendTo(responseBytes, clientEndPoint); Console.WriteLine($"Gởi thời gian đến client: {clientIP} => {timeString}" ); } } } catch (Exception ex) { // hiện thị lỗi Console.WriteLine (ex.ToString()); } } } } }
Source code server.cs ở trên, chúng ta sử dụng lớp Socket để tạo một đối tượng socket UDP cho server. Đầu tiên, chúng ta khởi tạo socket với các thông số AddressFamily.InterNetwork (IPv4), SocketType.Dgram (UDP), và ProtocolType.Udp.
Sau đó, chúng ta gán địa chỉ IP của server là IPAddress.Any để lắng nghe tất cả các giao diện mạng trên máy chủ và gán cổng là 8888 bằng cách sử dụng phương thức Bind.
Sau khi server đã sẵn sàng, chúng ta bắt đầu vòng lặp vô hạn để nhận yêu cầu từ client.
Khi nhận được yêu cầu, chúng ta chuyển đổi từ mảng byte sang chuỗi sử dụng mã hóa ASCII.
Nếu yêu cầu là "GET_TIME", chúng ta lấy ngày giờ hệ thống bằng cách sử dụng DateTime.Now.ToString(). Sau đó, chúng ta chuyển đổi ngày giờ thành mảng byte và gửi nó cho client sử dụng phương thức SendTo.
Chúc các bạn thành công với thủ thuật bổ ích này.
Nếu yêu cầu là "GET_TIME", chúng ta lấy ngày giờ hệ thống bằng cách sử dụng DateTime.Now.ToString(). Sau đó, chúng ta chuyển đổi ngày giờ thành mảng byte và gửi nó cho client sử dụng phương thức SendTo.
Lưu ý rằng trong ví dụ này, cổng của server được đặt là 8888. Bạn có thể thay đổi giá trị này tùy theo yêu cầu của bạn.
Chúc các bạn thành công với thủ thuật bổ ích này.
PASSWORD UNZIP: hungqb.com
Theo: LapTrinhVB.Net