Python 套接字连接无法通过本地网络

时间:2021-03-27 12:20:56

标签: python sockets networking lan wan

我正在尝试使用 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

我认为它与端口转发有关,所以我尝试使用它,但我也遇到了问题(端口似乎仍然关闭)。

我真的不知道接下来要做什么,如果您有什么建议或知道我可以尝试的其他事情,请回复。

2 个答案:

答案 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 防火墙,现在一切正常