Для игр с локальной сетью стандартная задача - отправлять широковещательные пакеты для обнаружения серверов. (Клиент отправляет широковещательную рассылку, сервер отправляет прямой ответ клиенту)
Обычно клиент отправляет от трех до пяти широковещательных сообщений, каждое с интервалом примерно в секунду, и затем решает, что не должно быть сервера, если он не получил никакого ответа в течение этого времени. Отправка нескольких пакетов делает обнаружение службы более устойчивым к потерям пакетов (хотя это довольно редко встречается в локальных сетях), а время между ними не дает им слишком сильно нарушать сетевой трафик.
Никто (насколько мне известно) не делает ваш вариант № 2, потому что это ухудшит производительность локальной сети (или займет много времени, если вы попытаетесь соединить попытки соединения).
Но чтобы справиться со случаями, когда вещание фильтруется локальной сетью (что довольно необычно, но не случайно), большинство игр позволяют игрокам напрямую вводить IP-адрес для подключения. Это позволяет игрокам в подобных ситуациях подключаться к известному серверу, даже если они не могут транслировать его автоматически.
Для игр через Интернет клиенты отправляют прямой запрос на статический метасервер , который отвечает адресами известных текущих экземпляров сервера. Серверы также связываются с этим метасервером, чтобы сообщить им о своем местонахождении, чтобы клиенты могли быть направлены к ним. Однако из-за сложности NAT этот подход обычно не работает для серверов, размещенных в локальной сети. Вот почему такой подход обычно не используется для игр в локальной сети.
Дополнительное примечание: в интернет-играх принято сначала обращаться к точечному серверу . Точечный сервер сообщает игре, по какому адресу он может найти метасервер, и сообщает, где можно найти серверы. Точечные серверы часто (хотя, конечно, не всегда) реализуются как простой веб-сервер и являются единственной частью этой системы с адресом, жестко закодированным в игре. Это позволяет разработчикам игр перемещать свой метасервер с одного компьютера на другой по мере необходимости, просто обновляя адрес, возвращаемый точечным сервером. Он также может быть использован для реализации простой формы распределения нагрузки или переключения областей, когда точечный сервер отправляет пользователей на разные мета-серверы в зависимости от нагрузки на сервер или географической близости.