這邊主要的重點是 UdpClient 這個類別,雖然從字面上這個類別叫做 UDP 的 Client (客戶端),但實際上我們也可以用它來建立伺服器,簡單來說 UdpClient 類別可以同時建立 伺服器端 (Server) 與 客戶端 (Client) 兩種功能

    如果今天要建立伺服器端 UdpClient 則要宣告成 UdpClient uc = new UdpClient(5555); ,這裡的 5555 代表伺服器的 Port (監聽埠)。

    如果今天要建立客戶端 UdpClient 擇要宣告成 UdpClient uc = new UdpClient(); ,也就是不需要指定 Port,因為只是發送消息,並不是要接收,所以電腦會依流水號的方式分配Port,將資料傳到指定IP:Port上 (此時指定IP:Port是使用 IPEndPoint 類別)。

以下範例程式碼:

 

伺服器端:

 using System;
using System.Net;
using System.Net.Sockets;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("這是伺服器...\n");

        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5555);
        UdpClient uc = new UdpClient(ipep.Port);

        int i = 0;
        while (true)
        {
            Console.WriteLine(System.Text.Encoding.UTF8.GetString(uc.Receive(ref ipep)));
            byte[] b = System.Text.Encoding.UTF8.GetBytes("這是'伺服器'回傳的訊息 ~ " + i++);
            uc.Send(b, b.Length, ipep);
        }
    }
}

客戶端:

using System;
using System.Net;
using System.Net.Sockets;

class MainClass
{
	public static void Main (string[] args)
	{
		Console.WriteLine ("這是客戶端...\n");
		IPEndPoint ipep = new IPEndPoint (IPAddress.Parse ("127.0.0.1"), 5555);
		UdpClient uc = new UdpClient ();
            
		for (int i = 0; i<10; i++) {
			byte[] b = System.Text.Encoding.UTF8.GetBytes ("這是'客戶端'傳送的訊息 ~ " + i);            
			uc.Send (b, b.Length, ipep);
			Console.WriteLine (System.Text.Encoding.UTF8.GetString (uc.Receive (ref ipep)));
		}			
	}
}


執行結果:

C# 基於 UDP-Socket 的 UdpClient 使用方法_UDP实例