【问题标题】:Listen to a range of UDP ports侦听一系列 UDP 端口
【发布时间】:2013-10-13 13:22:47
【问题描述】:

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

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

【问题讨论】:

    标签: c# udp


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      IPAddress.Any
      

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

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

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

      【讨论】:

      • 那么,如果游戏通过端口范围连接并且我想知道它何时建立连接,那将是什么方法呢?我将编辑我的帖子以展示游戏开发者的言论。
      • 他们使用范围来限制特定服务器的负载(即他们在不同的端口上运行不同的服务器)但初始连接将建立到一个端口。所以我的答案仍然存在。
      猜你喜欢
      • 2017-09-23
      • 1970-01-01
      • 2011-02-18
      • 2017-06-04
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2013-09-24
      • 2014-07-07
      相关资源
      最近更新 更多