套接字不能通过wifi网络Python工作

时间:2014-12-10 01:19:44

标签: python sockets tkinter wifi

我做了一个聊天程序。如果计算机连接到相同的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
  1. 为什么我收到此错误?
  2. 我该如何解决这个问题?
  3. 服务器脚本:

    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))
    

2 个答案:

答案 0 :(得分:1)

最可能的原因是每个wifi网络上的内部IP地址之间缺少任何路由。请记住,大多数无线网络上的IP地址都是网络本地的。

答案 1 :(得分:0)

当我使用Raspberry Pi构建一个小型遥控设备时,我已经无数次地完成了相同的问题。不幸的是,只有两种解决方案,这两种解决方案都很痛苦。

您可以将连接到您尝试连接的设备的路由器转发到端口,如果它不是静态的,则每次重置时都需要执行此操作。然后,您还需要连接到所述路由器的IP而不是目标计算机,端口转发应该完成其余的工作。

替代方案是在两个设备上使用Logmein Hamachi,但这是一个。)并不总是可能取决于您使用的系统,并且b。)习惯变得不可靠。无论如何,就我所知,没有办法在python中进行编码。