gpt4 book ai didi

python - 使用套接字通过主机名连接可以工作,但不适用于所有端口

转载 作者:行者123 更新时间:2023-11-30 21:50:32 25 4
gpt4 key购买 nike

我想了解套接字是如何工作的,所以我浏览了 HOWTOdocs并尝试编写自己的代码。服务器端如下所示:

ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
assert socket.gethostname() == HOST
ssock.bind((HOST, PORT))
ssock.listen(5)
while True:
csock, address = ssock.accept()
print('Accepted connection from', address)
t = threading.Thread(target=server, args=(csock,))
t.start()

客户端是:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))

它们位于一个模块中,因此常量是相同的。这是行不通的。当我尝试连接时,收到 ConnectionRefusedError: [Errno 111] Connection Connectionrejected

但是:

  1. 当我尝试通过主机名连接到另一个端口时,它可以工作:

    In [4]: s.connect((HOST, 22))

    In [5]: s.recv(1024)
    Out[5]: b'SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1\r\n'

    (显然,这不是我的应用程序处理服务器上的连接)。

  2. 当我在服务器代码中将主机名更改为本地 IP 地址时,我也可以连接到我的端口(使用 IP 作为主机字符串)。

这些情况结合在一起让我感到困惑。谁能解释一下这种行为?

编辑:如果我在服务器代码中使用IP,似乎我也可以与HOST连接。但为什么它不像 HOWTO 中那样工作呢?

最佳答案

绑定(bind)到“”而不是HOST:

ssock.bind(("", PORT))

关于python - 使用套接字通过主机名连接可以工作,但不适用于所有端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com