【发布时间】:2022-01-23 04:49:58
【问题描述】:
要在特定端口上创建新的 INET 套接字,执行以下操作有什么区别:
serversocket.bind((socket.gethostname(), 80))
并将绑定名称留空:
serversocket.bind(('', 80))
【问题讨论】:
标签: python sockets network-programming
要在特定端口上创建新的 INET 套接字,执行以下操作有什么区别:
serversocket.bind((socket.gethostname(), 80))
并将绑定名称留空:
serversocket.bind(('', 80))
【问题讨论】:
标签: python sockets network-programming
只有当您的机器有多个 IP 地址时才重要。如果您提供特定名称,您将绑定到主机解析到的任何 IP 地址。空字符串会将您绑定到所有地址。
更新。实际上,我意识到问题比我最初发布的要严重。每台机器都会有问题。
很多人没有意识到localhost是一个完全不同于计算机ip地址的接口。 localhost 不仅仅是机器 IP 的别名。
如果服务器绑定到localhost,它只会监听从当前机器到localhost 的连接。如果服务器绑定到机器的外部 IP 地址,它只会监听到该 IP 地址的连接;它不会看到与localhost 的连接。如果服务器绑定到 '',相当于 0.0.0.0,它会同时监听。
在我的 MacOS 上,socket.gethostname() 返回一个名称,该名称被解析为 127.0.0.1, localhost。我不知道这是 MacOS 主义还是其他操作系统上的真实情况。
但通常,如果您只侦听来自您自己的机器(测试、本地服务器)的连接,则使用 localhost,或者使用 ""。
【讨论】: