LAN上的服务器/客户端应用程序TimeoutError

时间:2016-10-07 20:54:36

标签: python sockets networking lan

我有两个程序:server.py和client.py。我需要能够在我的主PC中使用server.py,并从我的笔记本电脑中使用client.py。当我运行它们时,我从client.py得到以下错误:

TimeoutError: [WinError 10060]

我已经在我的PC(运行Windows 7)和我的笔记本电脑(运行Windows 8)中禁用了防火墙。

如何让他们连接?

我尝试过的一些事情:

  • 在PC上创建防火墙端口规则。
  • 在两台计算机上禁用防火墙。
  • 使用不同的端口。
  • 从" localhost"更改服务器地址对于socket.gethostname(),这会将错误从TimeoutError更改为ConnectionRefusedError

我的电脑的IP是192.168.0.2,我确信这是因为我有一台运行在端口80的Apache服务器,而且它可以工作(我可以从笔记本电脑访问)。

Python版本:PC:3.5.2,笔记本电脑:3.4.1

代码

server.py:

import socket
import threading

server_port = 2569
server_address = "localhost"

class ClientThread(threading.Thread):
    def __init__(self, client_info):
        super(ClientThread, self).__init__()
        self.client_info = client_info

    def run(self):
        socket = self.client_info[0]
        bytes_received = socket.recv(100)
        print(bytes_received.decode("utf-8"))

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((server_address, server_port))
server_socket.listen(5)

while True:
    new_client = server_socket.accept()
    ClientThread(new_client).run()

client.py:

import socket

server_port = 2569
server_address = "192.168.0.2"

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.connect((server_address, server_port))
server_socket.send(b"message")

1 个答案:

答案 0 :(得分:1)

您只需将localhost脚本中的socket.gethostname()server.py/client.py更改为服务器的实际内部IP 地址即可。然后它会工作!

如果您想了解更多相关原因,我建议您阅读this post 这深刻地解释了机器的localhost/127.0.0.1internal ip之间的差异,这些差异被错误地认为是相同的,但实际上它们不是。