我想使用C#的UdpClient来监听任何收到的UDP数据包。我想从任何IP和任何端口接收数据包。
我尝试了以下内容:
UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);
但没有成功。
有谁知道什么是错的? 提前谢谢!
答案 0 :(得分:6)
接收任何端口?那太疯狂了。你会被其他应用程序的消息所淹没(试试TcpView,了解你的系统每秒传递多少消息!)
您必须指定一个端口!端口有点像标识符 - 此数据包适用于此程序(由端口#标识)
任何端口上的发送都是明智的,因为它要求系统为您选择一个端口发送OUT端口 - 这对您的应用程序来说并不像发送者那么重要
答案 1 :(得分:5)
您最好的想法是识别您想要收听的特定端口,并开始聆听这些端口。根据接收数据报的处理方式,为您正在侦听的每个端口创建新的Thread
,并在那里处理它,或者在同步时将其排入队列(使用lock
可能是最好/最简单的。 )队列或列表,用于在中心线程上进行处理。
你应该限制端口;不可能全部倾听。
这就是说你可以使用类似Wireshark
或Winpcap
SDK / API的东西直接从网络适配器“嗅探”UDP数据包。我之前在.NET应用程序中工作没有太多困难。
希望有所帮助。
答案 2 :(得分:4)
您需要侦听特定端口。
通过传入零,您将被分配一个任意端口,因此您只会收到发送给它的UDP数据报。换句话说,你什么也得不到。
如果您收到了某些内容,IPEndPoint将填入有关发件人的信息。初始值可用于约束发件人。