【发布时间】:2021-06-24 03:05:05
【问题描述】:
我正在尝试使用 python 中的 Socket 模块让两台计算机(我的 PC 和笔记本电脑)通过本地网络进行通信。
这是在我的 PC 上运行的服务器端代码(通过 LAN 连接):
import socket
HOST = '192.168.1.3' #local PC IP
print(HOST)
PORT = 8080 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
print(data)
if not data:
break
conn.sendall(data)
这是客户端代码,在我的笔记本电脑上运行(通过 WiFi 连接):
import socket
TCP_IP = '192.168.1.3'
TCP_PORT = 8080
BUFFER_SIZE = 1024
MESSAGE = b"Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print("received data:", data)
问题是:当我执行这两个代码时,服务器端保持空闲等待连接,而客户端在一段时间后停止并返回以下超时错误:
Traceback (most recent call last):
File "C:\Users\...\client.py", line 13, in <module>
s.connect((TCP_IP, TCP_PORT))
TimeoutError: [WinError 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
我不明白为什么它不能从同一网络中的另一台设备连接,而如果我在与服务器相同的机器上执行客户端代码,即使我在 CMD 中运行 netstat -an 时它也能正常工作我可以看到计算机正在侦听该端口:
TCP 192.168.1.3:8080 0.0.0.0:0 LISTENING
我认为它与端口转发有关,所以我尝试使用它,但我也遇到了麻烦(端口似乎保持关闭)。
我真的不知道下一步该怎么做,如果您有什么建议或知道其他我可以尝试的方法,请回复。
【问题讨论】:
-
检查从客户端到服务器的连接(ping)。如果没问题,那么问题可能是服务器上的防火墙规则。它是什么操作系统?是否配置了防火墙?
-
客户端连接正常,我可以从谷歌甚至我的无线打印机得到响应。服务器和客户端都在 Windows 10 机器上运行,我能想到的唯一防火墙是路由器上的标准防火墙
标签: python sockets networking lan wan