繁体   English   中英

Python 基本客户端服务器套接字程序

[英]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)

  • 我可以从一台计算机到另一台计算机进行 ping。
  • 防火墙已关闭
  • Wireshark 显示 SYN 消息到达第二台计算机,由 RST 消息应答( Wireshark PC 服务器

如果您希望服务器对其他计算机开放,则不能在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM