我正在使用 Python 开发一个多人游戏,该游戏使用套接字库进行网络连接。游戏将支持局域网播放。一名玩家将设置服务器,局域网上的其他玩家将能够加入游戏。
为了实现这一点,我需要一种让玩家发现可用服务器列表的简单方法(不应该期望玩家必须输入 IP 地址!)。我首选的解决方案将仅使用 python 套接字库(以及可选的标准库的其他部分)。
我正在寻找的是客户端和服务器代码:
客户端:将其对游戏的请求广播到局域网上某个端口上侦听的所有机器
服务器:回复客户端的可用性
尝试的答案 按照 Hans 在下面的答案中的建议,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
还有其他令人信服的方法来处理这个可发现性问题吗?