Server/Client LAN 上的应用程序超时错误
Server/Client application TimeoutError on LAN
我有两个程序:server.py 和 client.py。我需要能够在我的主 PC 上使用 server.py,并在我的笔记本电脑上使用 client.py。当我 运行 他们时,我从 client.py 得到以下错误:
TimeoutError: [WinError 10060]
我的个人电脑(运行s Windows 7)和笔记本电脑(运行s Windows 8)都禁用了防火墙。
如何让他们连接?
我尝试过的一些东西:
- 正在 PC 上创建防火墙端口规则。
- 在两台计算机中禁用防火墙。
- 使用不同的端口。
- 将服务器地址从 "localhost" 更改为 socket.gethostname(),这会将错误从
TimeoutError
更改为 ConnectionRefusedError
。
我的 PC 的 IP 是 192.168.0.2,我确信这一点,因为我在端口 80 上有一个 Apache 服务器 运行ning,而且它可以工作(我可以从我的笔记本电脑访问它) .
Python 版本:个人电脑: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")
您只需要将server.py/client.py
脚本中的localhost
或socket.gethostname()
更改为服务器的实际内部IP地址。然后它会起作用!
如果您想了解更多发生这种情况的原因,我建议您阅读 this post
深入解释了机器的localhost/127.0.0.1
和internal ip
的区别,误以为是同一东西,其实不是。
我有两个程序:server.py 和 client.py。我需要能够在我的主 PC 上使用 server.py,并在我的笔记本电脑上使用 client.py。当我 运行 他们时,我从 client.py 得到以下错误:
TimeoutError: [WinError 10060]
我的个人电脑(运行s Windows 7)和笔记本电脑(运行s Windows 8)都禁用了防火墙。
如何让他们连接?
我尝试过的一些东西:
- 正在 PC 上创建防火墙端口规则。
- 在两台计算机中禁用防火墙。
- 使用不同的端口。
- 将服务器地址从 "localhost" 更改为 socket.gethostname(),这会将错误从
TimeoutError
更改为ConnectionRefusedError
。
我的 PC 的 IP 是 192.168.0.2,我确信这一点,因为我在端口 80 上有一个 Apache 服务器 运行ning,而且它可以工作(我可以从我的笔记本电脑访问它) .
Python 版本:个人电脑: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")
您只需要将server.py/client.py
脚本中的localhost
或socket.gethostname()
更改为服务器的实际内部IP地址。然后它会起作用!
如果您想了解更多发生这种情况的原因,我建议您阅读 this post
深入解释了机器的localhost/127.0.0.1
和internal ip
的区别,误以为是同一东西,其实不是。