Sto lavorando a un gioco multiplayer in python che utilizza la libreria socket per il suo networking. Il gioco supporterà il gioco su LAN. Un giocatore imposterà il server e gli altri giocatori della LAN potranno partecipare al gioco.Come rendere un server rilevabile ai client LAN
Per implementare questo, ho bisogno di un modo semplice per i giocatori di scoprire un elenco di server disponibili (non ci si deve aspettare che i giocatori debbano inserire gli indirizzi IP!). La mia soluzione preferita avrebbe usato solo la libreria dei socket Python (e facoltativamente altre parti della libreria standard).
Quello che sto cercando è client e server di codice:
cliente: trasmette la sua richiesta per i giochi per tutte le macchine in ascolto su una determinata porta sul
server (s) LAN: risponde al client con la sua disponibilità
rISPOSTA TENTATO Seguendo il consiglio di Hans' nella sua risposta qui sotto, un socket UDP può essere utilizzato per rispondere trasmettere le richieste f rom il cliente.
Server:
#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)
Cliente:
#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
ci sono altri modi interessanti per gestire questo problema reperibilità?
Si dovrebbe chiedere aiuto con codice non la strategia - probabilmente si potrebbe appendere intorno ad una chat room per ottenere questa domanda ha risposto – PyNEwbie