C#UDP同时监听多个端口是否接收数据
时间: 2023-07-12 11:10:55 浏览: 318
是的,C#可以同时监听多个UDP端口并接收数据。你可以创建多个UdpClient对象来监听不同的端口,并使用异步接收方法BeginReceive和EndReceive来接收数据。以下是一个简单的示例代码:
```
using System;
using System.Net;
using System.Net.Sockets;
class Program
{
static void Main(string[] args)
{
// 监听的端口列表
int[] ports = { 1234, 5678, 9012 };
// 创建多个UdpClient对象并绑定到不同的端口
UdpClient[] clients = new UdpClient[ports.Length];
for (int i = 0; i < ports.Length; i++)
{
clients[i] = new UdpClient(ports[i]);
}
Console.WriteLine("正在监听端口:{0}", string.Join(", ", ports));
// 异步接收数据
foreach (UdpClient client in clients)
{
client.BeginReceive(new AsyncCallback(ReceiveCallback), client);
}
Console.ReadLine();
}
static void ReceiveCallback(IAsyncResult ar)
{
UdpClient client = (UdpClient)ar.AsyncState;
IPEndPoint remoteEP = null;
byte[] data = client.EndReceive(ar, ref remoteEP);
Console.WriteLine("收到来自 {0} 的数据:{1}", remoteEP, Encoding.UTF8.GetString(data));
// 继续异步接收数据
client.BeginReceive(new AsyncCallback(ReceiveCallback), client);
}
}
```
在这个例子中,我们创建了一个包含三个UDP端口的列表,并使用循环创建了三个UdpClient对象来监听这三个端口。然后,我们使用异步接收方法BeginReceive和EndReceive来接收数据,并在回调方法ReceiveCallback中处理接收到的数据。在回调方法中,我们继续异步接收数据以便能够持续监听多个端口。
阅读全文