[英]Sockets are not working over wifi networks Python
我做了一个聊天程序。 如果计算机连接到相同的wifi网络,则可以使用。 但是,如果它们在单独的wifi网络上,则会出现此错误:
error: [Errno 10060] A connection attempt failed because the connected party did not properly
respond after a period of time, or established connection failed because connected host has failed
to respond
服务器脚本:
def startServer(self):
self.host = "localhost"
self.port = 8888
self.s = socket.socket()
self.s.bind((self.host, self.port))
self.s.listen(4)
chatArea = self.chatArea
chatArea.configure(state=NORMAL)
chatArea.insert(END, "The server has started!\n\n")
chatArea.configure(state=DISABLED)
for i in range(4):
Thread(target=self.connectClient).start()
def connectClient(self):
conn, addr = self.s.accept()
data = conn.recv(1024)
data = str(data)
self.connections.append(conn)
self.names.append(data)
name = self.names.index(data)
while str(data) != "Close":
data = conn.recv(1024)
if not data:
break
data = str(data)
if data != "Close":
string = self.names[name] + ": " + data + "\n"
self.chatArea.configure(state=NORMAL)
self.chatArea.insert(END, string)
self.chatArea.configure(state=DISABLED)
self.sendToClients(self.names[name], data)
self.connections.remove(conn)
conn.close()
这是客户端脚本:
def connect(self):
self.host = "The other computer ip address"
self.port = 8888
self.s = socket.socket()
self.s.connect((self.host, self.port))
最可能的原因是每个WiFi网络的内部IP地址之间缺少任何路由。 请记住,大多数wifi网络上的IP地址都是该网络的本地地址。
当我使用Raspberry Pi构建一个小的远程控制设备时,我经历了无数次完全相同的问题。 不幸的是,只有两种解决方案,这两种解决方案都很痛苦。
您可以通过端口转发与尝试连接的设备相连的路由器,如果它不是静态路由器,则每次重置路由器时都需要执行此操作。 然后,您还需要连接到所述路由器的IP而不是目标计算机,并且端口转发应完成其余工作。
另一种选择是在两个设备上都使用Logmein Hamachi,但这是a。)并非总是可能的,具体取决于您所使用的系统,并且b。)有变得不可靠的习惯。 据我所知,没有一种方法可以仅使用python进行编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.