【发布时间】:2012-08-03 05:49:22
【问题描述】:
我可以运行我的程序的两个实例并将它们相互连接,但是当其他 ip 上的其他人尝试连接到我的服务器时,他们的套接字无法连接。我的代码没有输入用户计算机的 ip,但是硬编码了我的 ip(因为我将是唯一运行服务器的人)。
这里是服务器类连接函数:
def connect(self,host,port):
self.host = host
self.port = port
self.unconnected_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.unconnected_socket.bind((self.host,self.port))
self.unconnected_socket.listen(5)
这是程序创建游戏的时间
self.server = server.Server()
self.server.connect(ip,port) #ip is my computer's ip address
self.serverThread = Thread(target=self.server.serve_forever)
self.serverThread.daemon = True
self.serverThread.start()
self.client.connect(ip,port)
现在这里是类客户端连接函数:
def connect(self,host,port):
self.host = host
self.port = port
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.host,self.port))
当其他计算机上的某人运行该程序但选择加入游戏时:
self.client.connect(ip,port)
我正在使用稍微修改过的 Mastermind Networking Lib - 来自 pygames 的 1.5.2。
【问题讨论】:
-
您的服务器在哪个主机上监听?确保它是公共接口而不是 localhost。
-
别忘了检查防火墙规则。
-
软管/IP 是我猜我家的服务器和客户端的 IP 地址不是 127.0.0.1。我确保将 pythonw 作为防火墙的例外。
-
我发现我的问题是,我没有从我的计算机为服务器转发端口,也没有让客户端连接到我的外部 IP。
标签: python networking tcp pygame