Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从任何ip和任何端口接收UDP数据包?_C#_Networking_Network Programming_Udp_Udpclient - Fatal编程技术网

C# 如何从任何ip和任何端口接收UDP数据包?

C# 如何从任何ip和任何端口接收UDP数据包?,c#,networking,network-programming,udp,udpclient,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); 但是没有成功 有人知道怎么了吗? 提前谢谢 您需要监听特定端口 通过传入零,将为您分配一个任意端口,因此您将只接收发往

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

我尝试了以下方法:

UdpClient udpClient = new UdpClient(0);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref ep);
但是没有成功

有人知道怎么了吗?
提前谢谢

您需要监听特定端口

通过传入零,将为您分配一个任意端口,因此您将只接收发往该端口的UDP数据报。换句话说,你将一无所获


如果您确实收到了一些信息,则iEndpoint将填充有关发件人的信息。初始值可用于约束发送方。

在任何端口上接收?那太疯狂了。您将收到来自其他应用程序的大量消息(请尝试了解每秒在您的系统上传递多少消息!)

您必须指定一个端口!端口有点像一个标识符——这个数据包是为这个程序准备的(由端口#标识)


在任何端口上发送都是明智的,因为它会要求系统为您选择一个端口发送端口——这对您的应用程序来说并不是那么重要,因为发送方有时

您最好的办法是确定您想要监听的特定端口,然后开始监听这些端口。根据对接收到的数据报所做的操作,最好/最简单的方法是为您正在侦听的每个端口创建一个新的
线程
,并在那里进行处理,或者将其放入同步(带有
)队列或列表中,以便在中心线程上进行处理

你应该限制端口;不可能把他们都听进去

也就是说,您可以使用类似于
Wireshark
Winpcap
SDK/API的东西从网络适配器“嗅探”UDP数据包。我以前在.NET应用程序中使用过它,没有太多困难


希望这能有所帮助。

我敢肯定,你不能像那样收听“每一个”端口。。。我也不明白你为什么要这么做。@Fosco:networksniffer?@MPritch:那也不是UDP。您将监听原始以太网数据包。Fosco和Steven Sudit(以下)是正确的。您不能通过指定端口0来侦听“每个”端口。系统会为您选择一个短暂的端口。现在,您正在侦听未选择的端口上的UDP数据包,并且没有应用程序知道要发送到哪个端口。如果您正在发送UDP数据报,或者如果您有单独的通道(任何类型)将临时端口号发送到发送应用程序,那么指定端口0并使用临时端口是有意义的。re:网络嗅探器?那就不是真的了然后称之为UDP嗅探器-不管是不是这样,都有合理的理由这样做。它可以在混杂模式下使用原始+UDP套接字(并在管理员级别运行)。如何在任何端口上接收“疯狂”,而在任何端口上发送“疯狂”呢?如果逻辑是端口识别数据包用于哪个程序,那么这将适用于发送和接收,对吗?