Сканирование игровых серверов в локальной сети с помощью winsock

Я пытаюсь понять, как использовать winsockets, чтобы превратить мою игру в игру, в которую можно играть по локальной сети. Я читал документацию по винсокетам, но не могу понять, как клиент может получить все игры, созданные в локальной сети.

Должен ли он пытаться «подключиться» к каждому IP-адресу в локальной сети, например, пытаться подключиться к 192.168.0.1, затем к 192.168.0.2 и т. д.? Есть ли способ лучше?


person Lost Developer    schedule 08.07.2010    source источник
comment
Ознакомьтесь с en.wikipedia.org/wiki/Broadcast_address.   -  person Will A    schedule 09.07.2010


Ответы (4)


Вы бы использовали широковещательную рассылку для рекламы своих серверов в локальной сети. Затем клиенты могут прослушивать эти трансляции, чтобы «найти» серверы.

Подробнее см. здесь: http://tangentsoft.net/wskfaq/intermediate.html#broadcast< /а>

person DrDeth    schedule 08.07.2010

Обычно эти игровые серверы используют локальную широковещательную рассылку UDP, которую все клиенты получают и могут обрабатывать, пока они ее прослушивают.

Вот пример кода клиента и сервера, который я нашел, который может вас заинтересовать: http://visual-c.itags.org/visual-c-c++/29424/

person rakuo15    schedule 08.07.2010

Я думаю, что есть два возможных способа сделать это.

  1. Создайте «лобби», к которому подключаются клиенты и серверы, чтобы они могли через него найти друг друга.

  2. Серверы транслируют UDP-пакеты. Клиенты прослушивают и обновляют список серверов.

Если вам нужен быстрый и простой способ, второй вариант будет отличным, но помните, что большинство пакетов UDP будут потрачены впустую, поскольку они используются только один раз для каждого клиента.

1-й вариант является более общим и расширенным решением этой проблемы. Однако для разработки и реализации может потребоваться больше времени.

person young    schedule 22.07.2010

Во-первых, я предлагаю вам использовать wireshark для любой сетевой разработки. Он покажет вам, какой пакет проходит через провод. Это позволит вам увидеть, как это делают другие игры, поскольку есть много способов сделать это.

Использование широковещательной рассылки UDP — один из способов сделать это. Просто измените последний байт целевого IP-адреса на 255, и все будет в порядке.

person Eric    schedule 08.07.2010
comment
Слепое изменение последнего байта не всегда будет работать. Это зависит от фактической маски подсети, используемой в сети. Правильный способ генерации широковещательного адреса состоит в том, чтобы взять IP-адрес локального компьютера, 'И' с маской подсети, а затем 'ИЛИ' с инверсией маски подсети. В качестве альтернативы просто используйте глобальный широковещательный адрес 255.255.255.255, но не все брандмауэры/маршрутизаторы пропустят его. - person Remy Lebeau; 13.07.2010