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

时间:2010-07-21 15:43:07

标签: c# networking network-programming udp udpclient

我想使用C#的UdpClient来监听任何收到的UDP数据包。我想从任何IP和任何端口接收数据包。

我尝试了以下内容:

UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);

但没有成功。

有谁知道什么是错的? 提前谢谢!

3 个答案:

答案 0 :(得分:6)

接收任何端口?那太疯狂了。你会被其他应用程序的消息所淹没(试试TcpView,了解你的系统每秒传递多少消息!)

您必须指定一个端口!端口有点像标识符 - 此数据包适用于此程序(由端口#标识)

任何端口上的

发送都是明智的,因为它要求系统为您选择一个端口发送OUT端口 - 这对您的应用程序来说并不像发送者那么重要

答案 1 :(得分:5)

您最好的想法是识别您想要收听的特定端口,并开始聆听这些端口。根据接收数据报的处理方式,为您正在侦听的每个端口创建新的Thread,并在那里处理它,或者在同步时将其排入队列(使用lock可能是最好/最简单的。 )队列或列表,用于在中心线程上进行处理。

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

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

希望有所帮助。

答案 2 :(得分:4)

您需要侦听特定端口。

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

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