我凭经验发现
Endpoint endpoint1 = Endpoint.create(new Ping());
endpoint1.publish("http://0.0.0.0:8080/ws/ping");
绑定到当前计算机上的所有网络接口(而不仅仅是 localhost - 127.0.0.1 或主机名),但我无法找到说明这是保证的文档。
问题:在哪里定义绑定到 Java 中的 0.0.0.0 将始终绑定到所有网络接口?
我凭经验发现
Endpoint endpoint1 = Endpoint.create(new Ping());
endpoint1.publish("http://0.0.0.0:8080/ws/ping");
绑定到当前计算机上的所有网络接口(而不仅仅是 localhost - 127.0.0.1 或主机名),但我无法找到说明这是保证的文档。
问题:在哪里定义绑定到 Java 中的 0.0.0.0 将始终绑定到所有网络接口?
使用0.0.0.0
只会绑定到启用 IPv4 的接口。但是,如果您绑定到::
,则应该涵盖所有 IPv4 和 IPv6 接口,假设您的 TCP/IP 堆栈(和 Java)启用了与 IPv4 兼容的 IPv6 套接字。
您需要查看内核(或套接字库,如果您在 Windows 上)以了解“为什么”的解释。在我的 OS X 系统上,man
页面解释了它。
来自man 4 inet`:
可以使用本地地址创建套接字,
INADDR_ANY
以对传入消息进行“通配符”匹配。connect(2) 或sendto(2)调用中的地址可以表示为INADDR_ANY
“此主机”。INADDR_BROADCAST
如果配置的第一个网络支持广播,则允许区分地址作为主网络上的广播地址的简写。
从man 4 inet6:
可以使用本地地址
::
(等于 IPv6 地址0:0:0:0:0:0:0:0
)创建套接字,以影响传入消息的“通配符”匹配。
它与Java无关。0.0.0.0 是 INADDR_ANY,它是一个特殊的地址,由 Java 调用的C套接字 API 保证从任何 网络接口接收。
它似乎是某种特殊的保留 IP 地址。这个链接可能有更多信息0.0.0.0 是一个有效的 IP 地址吗?. 所以我怀疑它没有用 Java 记录,因为它与实际的网络规范更相关。
正如其他一些人提到的那样,它似乎是 Chuck Norris IP 地址:D
高温高压