(C#)使用udp協議實現訊息的接收
阿新 • • 發佈:2018-12-06
1.udp-伺服器端的實現
使用udp協議傳輸資料不需要建立連線
第一步建立Socket,第二步給伺服器的Socket繫結ip和port,這個Socket就可以通過這個ip和port接收資料了。
第三步接收資料,在本例中通過新建執行緒的方式來接收資料,將執行緒設定為後臺執行緒,這樣在程序結束的時候,接收資料也不需要了。在ReceiveMessage的函式中實現了接收資料。ReceiveFrom的方法將資料存入data中,將資料來源的ip和port存入了一個EndPoint中。
class Program { private static Socket udpServer; static void Main(string[] args) { //1.Socket creat udpServer = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //2.Bind ip and port udpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.103"),7788)); //3.receive data new Thread(ReceiveMessage) { IsBackground = true}.Start(); Console.ReadKey(); } static void ReceiveMessage() { while (true) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); byte[] data = new byte[1024]; int length = udpServer.ReceiveFrom(data, ref remoteEndPoint);//此方法把資料來源ip、port放到第二個引數中 string message = Encoding.UTF8.GetString(data, 0, length); Console.WriteLine ("從ip" + (remoteEndPoint as IPEndPoint).Address.ToString() + ":" + (remoteEndPoint as IPEndPoint).Port + "Get" + message); } } }
2.udp-客戶端的實現
在客戶端只需要建立Socket,給Socket指定目標的ip和port,向這個EndPoint傳送資料就可以了
class Program { static void Main(string[] args) { //建立Socket Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // Send message while (true) { EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("192.168.1.103"), 7788); string message = Console.ReadLine(); byte[] data = Encoding.UTF8.GetBytes(message); udpClient.SendTo(data, serverPoint); } udpClient.Close(); Console.ReadKey(); } }