使用udpClient连续接收消息

我正在寻找通过C# UdpClient类接收和处理消息的最佳解决方案。 有人有任何解决方案吗?

试试这段代码:

 //Client uses as receive udp client UdpClient Client = new UdpClient(Port); try { Client.BeginReceive(new AsyncCallback(recv), null); } catch(Exception e) { MessageBox.Show(e.ToString()); } //CallBack private void recv(IAsyncResult res) { IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 8000); byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); //Process codes MessageBox.Show(Encoding.UTF8.GetString(received)); Client.BeginReceive(new AsyncCallback(recv), null); } 

对于使用TAP而不是Begin / End方法的较新方法,您可以在.Net 4.5中使用以下方法

非常简单!

异步方法

  private static void UDPListener() { Task.Run(async () => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var receivedResults = await udpClient.ReceiveAsync(); loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer); } } }); } 

同步方法

与上面的asynchronous方法一样,这也可以以非常类似的方式在synchronous方法中实现:

  private static void UDPListener() { Task.Run(() => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); var receivedResults = udpClient.Receive(ref remoteEndPoint); loggingEvent += Encoding.ASCII.GetString(receivedResults); } } }); } 

我可以推荐两个关于这个解决方案的链接,对我有帮助。

电脑相关

堆栈溢出

第一个是非常简单的解决方案,但要小心修改,因为只有当一些UDP数据包作为第一个发送到“远程”设备时,连续接收才会起作用。 对于连续监听,添加代码行“udp.BeginReceive(new AsyncCallback(UDP_IncomingData),udp_ep);” 在每次读取数据后,启用新的UDP数据包接收。

第二个是使用多播IP地址的好方法(239.255.255.255 – 240.0.0.0)