bind() 套接字到本地主机以外的任何地址是什么意思?

What does it mean to bind() a socket to any address other than localhost?

我不明白 意味着 bind 到 127.0.0.1(或 ::1 等)以外的任何地址的套接字。
我不是——根据定义——将套接字绑定到我自己的机器上的一个端口..这是本地主机吗?
绑定或监听 另一台 机器或 IP 地址的端口有什么意义?
从概念上讲,这对我来说没有意义!

(事实证明,Google 出乎意料地难...可能是因为我没有在谷歌上搜索正确的术语。)

套接字绑定到地址和端口,以便在此套接字上接收数据(大多数情况)或在发送数据时使用此 address/port 作为数据源(例如与FTP 服务器中的数据连接)。

通常一台特定的机器上有几个接口,即机器可以到达自己的伪接口环回,以太网,WLAN,VPN ...。这些接口中的每一个都可以分配多个 IP 地址。例如,环回通常有 127.0.0.1,IPv6 也有 ::1,但您也可以分配其他地址。以太网或 WLAN 具有本地网络上的 IP 地址,即 172.16.0.34 或其他。

如果将用于接收数据的套接字绑定到特定地址,则只能接收发送到该特定IP地址的数据。例如,如果您绑定到 127.0.0.1,您将能够从您自己的系统接收数据,但不能从本地网络上的其他系统接收数据,因为它们无法将数据发送到 your 127.0 .0.1:对于一个到 127.0.0.1 的任何数据都将被发送到 他们自己的 127.0.0.1 第二个你的 127.0.0.1 是你的内部环回接口上的地址,从外部无法访问.

您还可以将套接字绑定到一个包罗万象的地址,例如 0.0.0.0 (Ipv4) 和 :: (Ipv6)。在这种情况下,它没有绑定到特定的 IP 地址,但能够接收发送到机器的任何 IP 地址的数据。