Python 3.x 搜索套接字主机并显示其IP地址
我正在使用套接字在Python上创建一个本地客户机-服务器游戏,其中服务器托管在本地网络上,如果网络上的客户机具有服务器的IP地址,则可以连接到服务器。它不是专用服务器,所以它只在客户端计算机上的另一个线程上运行。当前,客户端必须手动输入服务器的IP地址才能连接到它。我希望客户端能够在网络中搜索可用的服务器,但我不确定如何让服务器广播其可用性 这是服务器端脚本:Python 3.x 搜索套接字主机并显示其IP地址,python-3.x,sockets,server,Python 3.x,Sockets,Server,我正在使用套接字在Python上创建一个本地客户机-服务器游戏,其中服务器托管在本地网络上,如果网络上的客户机具有服务器的IP地址,则可以连接到服务器。它不是专用服务器,所以它只在客户端计算机上的另一个线程上运行。当前,客户端必须手动输入服务器的IP地址才能连接到它。我希望客户端能够在网络中搜索可用的服务器,但我不确定如何让服务器广播其可用性 这是服务器端脚本: totalConnections = 0 port = 5555 host=socket.gethostname() IP = soc
totalConnections = 0
port = 5555
host=socket.gethostname()
IP = socket.gethostbyname(host) #this just fetches the computer's IP address so the server can use it
server = IP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((server, port))
except socket.error as e:
str(e)
s.listen(2)
print("Waiting for a connection, Server Started")
while True:
conn, addr = s.accept()
print("Connected to:", addr)
totalConnections += 1
start_new_thread(threaded_client, (conn, currentPlayer))
currentPlayer += 1
def threaded_client(conn, player):
conn.send(pickle.dumps(all_data[player])) # sends player data to client
While True:
conn.sendall(pickle.dumps(reply))
这是客户端:
class Network:
def __init__(self,ip):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = ip
self.port = 5555
self.addr = (self.server, self.port)
self.p = self.connect()
def getP(self):
return self.p
def connect(self):
try:
self.client.connect(self.addr)
return pickle.loads(self.client.recv(2048*3))
except:
pass
def send(self, data):
try:
self.client.send(pickle.dumps(data))
return pickle.loads(self.client.recv(2048*3))
except socket.error as e:
print(e)
我发现解决方案是在所有客户端都连接到的特定UDP端口上使用多播,以便在它们之间共享数据: