如何从任何IP和任何端口接收UDP数据包?

我想用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 )队列或列表上排队,以便进行处理可能是最好/最简单的。中心线索。

你应该限制端口; 不可能全部倾听他们。

也就是说,您可以使用WiresharkWinpcap SDK / API之类的东西直接从网络适配器“嗅探”UDP数据包。 我之前在.NET应用程序中工作没有太多困难。

希望有所帮助。

您需要侦听特定端口。

通过传入零,您将被分配一个任意端口,因此您只会收到发送给它的UDP数据报。 换句话说,你什么都得不到。

如果您确实收到了某些内容,则会在IPEndPoint中填入有关发件人的信息。 初始值可用于约束发件人。