我正在尝试使用 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
我认为它与端口转发有关,所以我尝试使用它,但我也遇到了问题(端口似乎仍然关闭)。
我真的不知道接下来要做什么,如果您有什么建议或知道我可以尝试的其他事情,请回复。
答案 0 :(得分:0)
您正在侦听并连接到同一个 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
答案 1 :(得分:0)
这实际上是一个防火墙问题,我只需要为本地网络禁用 Windows Defender 防火墙,现在一切正常