如何解决Python 套接字连接无法通过本地网络
我正在尝试使用 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
如果我在与服务器相同的机器上执行客户端代码,即使我运行 netstat -an
CMD 我可以看到在那个端口上监听的计算机:
TCP 192.168.1.3:8080 0.0.0.0:0 LISTENING
我认为它与端口转发有关,所以我尝试使用它,但我也遇到了问题(端口似乎仍然关闭)。
我真的不知道接下来要做什么,如果您有什么建议或知道我可以尝试的其他事情,请回复。
解决方法
您正在侦听并连接到同一个 IP - 您需要在服务器上侦听客户端的 IP(或任何具有正确端口号的 IP)并连接到客户端上的服务器 IP。
例如,如果客户端的 IP 是 1.2.3.4,服务器的 IP 是 1.2.3.5,则
# server side
s.bind(('1.2.3.4',8080)) # CLIENT_IP = '1.2.3.4'; PORT = 8080
# can also be s.bind(('0.0.0.0',8080)) if you don't have anything else connecting
# to this port on the server.
# client side
s.connect(('1.2.3.5',8080)) # SERVER_IP = '1.2.3.5'; PORT = 8080
,
这实际上是一个防火墙问题,我只需要为本地网络禁用 Windows Defender 防火墙,现在一切正常
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。