2013-10-07 6 views
2

Я слушаю, когда игра присоединяется к серверу, и я знаю диапазон портов, но, к сожалению, функция приема UDPClient прослушивает только определенный порт. Поскольку порт, который он соединяет, является случайным в диапазоне, есть ли хороший способ обрабатывать прослушивание в диапазоне портов 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

I _guess_ они используют диапазон для ограничения нагрузки на конкретный сервер (т. Е. У них разные серверы, работающие на разных портах), но исходное соединение будет выполнено для одного порта. Так что мой ответ остается. – markmnl

Смежные вопросы