【问题标题】:Difference between socket bind names套接字绑定名称之间的区别
【发布时间】:2022-01-23 04:49:58
【问题描述】:

要在特定端口上创建新的 INET 套接字,执行以下操作有什么区别:

serversocket.bind((socket.gethostname(), 80))

并将绑定名称留空:

serversocket.bind(('', 80))

【问题讨论】:

    标签: python sockets network-programming


    【解决方案1】:

    只有当您的机器有多个 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,或者使用 ""

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2020-10-18
      • 1970-01-01
      • 2012-11-20
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多