10

我凭经验发现

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 将始终绑定到所有网络接口?

4

3 回答 3

16

使用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)创建套接字,以影响传入消息的“通配符”匹配。

于 2012-06-19T23:00:43.320 回答
9

它与Java无关。0.0.0.0 是 INADDR_ANY,它是一个特殊的地址,由 Java 调用的C套接字 API 保证任何 网络接口接收。

于 2012-06-19T10:14:26.547 回答
3

它似乎是某种特殊的保留 IP 地址。这个链接可能有更多信息0.0.0.0 是一个有效的 IP 地址吗?. 所以我怀疑它没有用 Java 记录,因为它与实际的网络规范更相关。

正如其他一些人提到的那样,它似乎是 Chuck Norris IP 地址:D

高温高压

于 2012-06-19T09:02:55.373 回答