首页 文章

如何使LAN客户端可以发现服务器

提问于
浏览
6

我正在使用python中的多人游戏,它使用套接字库进行网络连接 . 该游戏将支持局域网上的游戏 . 一个玩家将设置服务器,LAN上的其他玩家将能够加入游戏 .

为了实现这一点,我需要一种简单的方法让玩家发现可用服务器列表(玩家不应该被要求输入IP地址!) . 我首选的解决方案只使用python套接字库(以及标准库的其他部分) .

我要找的是客户端和服务器代码:

  • 客户端:向在LAN上某个端口上侦听的所有计算机广播其游戏请求

  • server(s):回复客户端及其可用性

根据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

还有其他令人信服的方法来处理这种可发现性问题吗?

1 回答

  • 3

    您可以尝试UDP广播 . 你可以,例如从客户端发送广播 . 然后,服务器应该使用其地址广播响应,以便客户端可以使用常规连接 .

    有关示例代码,请参见此处:http://wiki.python.org/moin/UdpCommunication

相关问题