Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 搜索套接字主机并显示其IP地址_Python 3.x_Sockets_Server - Fatal编程技术网

Python 3.x 搜索套接字主机并显示其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

我正在使用套接字在Python上创建一个本地客户机-服务器游戏,其中服务器托管在本地网络上,如果网络上的客户机具有服务器的IP地址,则可以连接到服务器。它不是专用服务器,所以它只在客户端计算机上的另一个线程上运行。当前,客户端必须手动输入服务器的IP地址才能连接到它。我希望客户端能够在网络中搜索可用的服务器,但我不确定如何让服务器广播其可用性

这是服务器端脚本:

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端口上使用多播,以便在它们之间共享数据: