[英]Python Basic Client Server Socket Programs
我尝试了来自 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)
如果您希望服务器对其他计算机开放,则不能在127.0.0.1
上监听,这基本上是一个内部本地循环,仅位于运行程序的计算机上(这就是为什么它在评论中称为环回)。 您应该让服务器监听它自己的真实地址(例如: 10.0.0.55
显式)。
但是,如果您的主机可以更改地址,这可能会很烦人,一个简单的解决方法是只使用本地 IP 地址,如下所示(在服务器上):
HOST = socket.gethostbyname(socket.gethostname())
或者,如果您特别想使用来自一个网络接口的地址:
HOST = '10.0.0.55'
或者,如果您想监听所有网络接口:
HOST = '0.0.0.0'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.