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

时间:2019-10-06 08:49:42

标签: python sockets tcp

我从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 server)回答

1 个答案:

答案 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'