侦听一系列 UDP 端口

本文关键字:端口 UDP 一系列 | 更新日期: 2023-09-27 18:34:21

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

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

侦听一系列 UDP 端口

套接字 API 无法做到这一点。 您需要使用在更深层次上绑定到 TCP/IP 堆栈的库,例如 libpcap

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

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

udp[2:2] >= 9000 and udp[2:2] < 9100

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

IPAddress.Any

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

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

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