2

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

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

4

2 回答 2

2

使用套接字 API 是不可能的。您将需要使用与 TCP/IP 堆栈更深层次相关联的库,例如libpcap.

由于您使用 C#,因此您对 pcap.NET 最感兴趣,它是WinPCap 的 .NET 接口

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

udp[2:2] >= 9000 and udp[2:2] < 9100
于 2013-10-07T04:11:59.033 回答
1

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

IPAddress.Any

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

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

UdpClient udpClient = new UdpClient(11000);
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] receivedBytes = udpClient.Receive(ref RemoteIpEndPoint); 
于 2013-10-07T05:37:31.297 回答