2013-10-07 100 views
2

我在監聽遊戲加入服務器時的情況,並且知道端口範圍,但不幸的是,UDPClient的Receive功能僅偵聽特定端口。由於它加入的端口在該範圍內是隨機的,是否有一種處理UDP端口範圍內偵聽的好方法?收聽一系列UDP端口

這是從他們的開發人員的遊戲論壇: 「的Dota 2使用UDP協議和端口27015至28999,以我們的專用服務器進行通信默認情況下,您的客戶端打開UDP端口27005或您的計算機連接到。遊戲服務器「。 - http://dev.dota2.com/showthread.php?t=15261

回答

2

這對套接字API來說是不可能的。您需要使用一個綁定到更深層次的TCP/IP堆棧的庫,例如libpcap

由於您使用C#,你最感興趣的pcap.NET, a .NET interface to WinPCap

如果你想匹配目標UDP端口,你可以使用的

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

這是一個過濾器,因爲你不應該正在傾聽一系列的港口。而是聽一個端口,但從任何IP地址接受它。您可以通過以下方式實現此目的:

IPAddress.Any 

作爲偵聽的地址參數。然後在另一端指定目標端口作爲服務器正在偵聽的端口。

例如從任何客戶端接收端口11000的數據:

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

所以如果遊戲是通過一個端口範圍的連接,我想知道這將是一個方法,然後當其進行連接?我將編輯我的帖子以顯示遊戲開發者的說法。 – justNeph

+0

我覺得他們正在使用一個範圍來限制一個特定的服務器(即他們有不同的服務器運行在不同的端口上),但是初始連接將被設置爲一個端口。所以我的答案依然存在 – markmnl