我从realpython(https://realpython.com/python-sockets/#echo-client-and-server)尝试了用于客户端和服务器的基本程序
虽然它们在同一台计算机上运行时可以正常工作,但在不同计算机上尝试时存在以下问题:
ConnectionRefusedError:[WinError 10061]无法建立连接,因为目标计算机主动拒绝了该连接
客户代码:
HOST = '10.0.0.55' # The server's hostname or IP address
PORT = 65432 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
服务器代码:
import socket
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # 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)
if not data:
break
conn.sendall(data)
答案 0 :(得分:0)
如果您希望服务器对其他计算机开放,则您不能在127.0.0.1
上侦听,它基本上是一个内部本地循环,仅位于运行程序的计算机上(这就是为什么在注释中称为回送) 。您应该让服务器监听自己的真实地址(例如:10.0.0.55
明确)。
但是,如果您的主机可以更改地址,这可能会很烦人,一种简单的解决方法是仅使用以下本地IP地址(在服务器上):
HOST = socket.gethostbyname(socket.gethostname())
或者如果您特别想使用一个网络接口中的地址,则:
HOST = '10.0.0.55'
或者,如果您想在所有网络接口上监听:
HOST = '0.0.0.0'