LAN 上的服务器/客户端应用程序 TimeoutError
Posted
技术标签:
【中文标题】LAN 上的服务器/客户端应用程序 TimeoutError【英文标题】:Server/Client application TimeoutError on LAN 【发布时间】:2016-10-07 20:54:36 【问题描述】:我有两个程序:server.py 和 client.py。我需要能够在我的主 PC 中使用 server.py,并在我的笔记本电脑中使用 client.py。当我运行它们时,我从 client.py 收到以下错误:
TimeoutError: [WinError 10060]
我的电脑(运行 Windows 7)和笔记本电脑(运行 Windows 8)都禁用了防火墙。
如何让他们建立联系?
我尝试过的一些事情:
在 PC 上创建防火墙端口规则。 禁用两台计算机的防火墙。 使用不同的端口。 将服务器地址从“localhost”更改为socket.gethostname(),这会将错误从TimeoutError
更改为ConnectionRefusedError
。
我的 PC 的 IP 是 192.168.0.2,我很确定这一点,因为我有一个 Apache 服务器在端口 80 上运行,并且它可以工作(我可以从我的笔记本电脑访问它)。
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】:您只需将server.py/client.py
脚本中的localhost
或socket.gethostname()
更改为服务器的实际内部ip地址即可。然后它将起作用!
如果您想了解更多为什么会发生这种情况,我建议您阅读this post
这深入解释了localhost/127.0.0.1
和机器的internal ip
之间的区别,它们被错误地认为是同一件事,但实际上它们不是。
【讨论】:
那么如何找到内部ip呢? @sempiedram 你用的是什么操作系统?实际上,如果您在帖子中使用您的 PC 作为服务器,您提到它有一个内部 IP192.168.0.2
- 这是内部 IP....
@sempiedram 我试用了你的脚本,从localhost
更改为我的内部IP 地址后它们成功执行。使用localhost
我也有同样的错误......
非常感谢。是的,我确定我已经尝试将 192.168.0.2 用于服务器,但它给了我一个错误,或者什么。但它现在正在工作!谢谢。
@sempiedram,这是一个很好的问题,因为它证明了——实际上很好地证明了localhost
和internal ip
是两个不同的东西以上是关于LAN 上的服务器/客户端应用程序 TimeoutError的主要内容,如果未能解决你的问题,请参考以下文章
在 LAN 中使用 Websockets 代替原始 TCP 套接字有啥好处吗?
带有 MySQL 客户端-服务器 LAN 设置的 Java Swing JDBC
docker-compose 连接来自 LAN 上不同设备的服务器/客户端容器