我想使用C#的UdpClient来监听任何传入的UDP数据包。我希望能够接收来自任何IP和任何端口的数据包。
我尝试了以下方法:
UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);
但是没有成功。
有人知道出了什么问题吗? 提前感谢!
我想使用C#的UdpClient来监听任何传入的UDP数据包。我希望能够接收来自任何IP和任何端口的数据包。
我尝试了以下方法:
UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);
但是没有成功。
有人知道出了什么问题吗? 提前感谢!
在任何端口上都接收信息?这太疯狂了。你会被其他应用程序的消息淹没(尝试使用TcpView来了解每秒在您的系统上传递的消息数量!)
你必须指定一个端口!端口有点像标识符--这个数据包是为这个程序(通过端口号标识)而设计的。
在任何端口上发送是合理的,因为它要求系统为你选择一个发送OUT端口--这对于发送方有时并不是非常重要。
Thread
进行处理可能是最好/最简单的选择,或者将其排队在同步(使用lock
)队列或列表上,以供中央线程处理。Wireshark
或Winpcap
SDK / API的工具从网络适配器“嗅探”UDP数据包。我之前在.NET应用程序中也成功实现过这一点,没有遇到太多困难。您需要监听一个特定的端口。
如果传入零,将会分配一个任意的端口,因此您只会收到发送至该端口的UDP数据包。换句话说,您将什么都不会收到。
如果您确实收到了一些内容,IPEndPoint将填充有关发送方的信息。初始值可用于约束发送方。