收听一系列UDP端口

时间:2013-10-07 04:07:11

标签: c# udp

我正在监听游戏何时加入服务器并且我知道端口的范围,但遗憾的是UDPClient的接收功能仅侦听特定端口。由于它加入的端口在范围内是随机的,有没有一种很好的方法来处理UDP端口范围的监听?

这是来自他们的开发者的游戏论坛: “Dota 2使用UDP协议并在端口27015到28999上与我们的专用服务器通信。默认情况下,您的客户端打开UDP端口27005或您的计算机连接到游戏服务器。” - http://dev.dota2.com/showthread.php?t=15261

2 个答案:

答案 0 :(得分:2)

套接字API无法实现。您将需要使用与更深层次的TCP / IP堆栈相关联的库,例如libpcap

由于您使用C#,因此您最感兴趣的是pcap.NET, a .NET interface to WinPCap

如果要匹配目标UDP端口,可以使用

过滤器
udp[2:2] >= 9000 and udp[2:2] < 9100

答案 1 :(得分:1)

这是因为您不应该收听一系列端口。而是听一个端口,但从任何IP地址接受它。您可以使用以下方法实现此目的:

IPAddress.Any

作为听取的地址参数。然后在另一端指定目标端口作为服务器正在侦听的端口。

例如,从端口11000上的任何客户端接收数据:

UdpClient udpClient = new UdpClient(11000);
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] receivedBytes = udpClient.Receive(ref RemoteIpEndPoint);