Как сделать сервер доступным для клиентов локальной сети

Я работаю над многопользовательской игрой на python, которая использует библиотеку сокетов для своей сети. Игра будет поддерживать игру по локальной сети. Один игрок настроит сервер, а другие игроки в локальной сети смогут присоединиться к игре.

Чтобы реализовать это, мне нужен простой способ для игроков найти список доступных серверов (игрокам не нужно вводить IP-адреса!). Мое предпочтительное решение будет использовать только библиотеку сокетов Python (и, возможно, другие части стандартной библиотеки).

Я ищу код клиента и сервера:

  • клиент: транслирует свой запрос на игры всем машинам, прослушивающим определенный порт в локальной сети

  • сервер (ы): отвечает клиенту с его доступностью

ПОПЫТКА ОТВЕТОВ Следуя совету Ханса в своем ответе ниже, сокет UDP можно использовать для ответа на широковещательные запросы от клиента.

Сервер:

#UDP server responds to broadcast packets
#you can have more than one instance of these running
import socket
address = ('', 54545)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
server_socket.bind(address)

while True:
    print "Listening"
    recv_data, addr = server_socket.recvfrom(2048)
    print addr,':',recv_data
    server_socket.sendto("*"+recv_data, addr)

Клиент:

#UDP client broadcasts to server(s)
import socket

address = ('<broadcast>', 54545)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

data = "Request"
client_socket.sendto(data, address)
while True:
    recv_data, addr = client_socket.recvfrom(2048)
    print addr,recv_data

Существуют ли другие убедительные способы справиться с проблемой обнаружения?

1 ответ

Вы можете попробовать UDP-трансляцию. Например, вы можете отправить трансляцию с клиента. Затем сервер должен передать ответ со своим адресом, чтобы клиент мог использовать обычное соединение.

Смотрите здесь для примера кода: http://wiki.python.org/moin/UdpCommunication

Другие вопросы по тегам