我想使用 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
为您正在侦听的每个端口创建一个新端口,并在那里处理它,或者将其排入同步(with lock
)队列或列表中,以便在中央处理线。
您应该限制端口;不可能全部听完。
也就是说,您可以使用类似SDK/API 之类Wireshark
的东西Winpcap
直接从网络适配器“嗅探”UDP 数据包。我以前在.NET 应用程序中工作过,没有太多困难。
希望有帮助。
您需要侦听特定端口。
通过传入零,您被分配了一个任意端口,因此您将仅接收寻址到它的 UDP 数据报。换句话说,你将一无所获。
如果您确实收到了某些东西,IPEndPoint 将填写有关发件人的信息。初始值可用于约束发送者。