我从经验上发现了
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 :(得分:13)
使用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)影响传入的“通配符”匹配 消息。
答案 1 :(得分:9)
它与Java无关。 0.0.0.0是INADDR_ANY,这是一个特殊的地址,保证 C 套接字API 从任何 网络接口接收,这是由Java调用。
答案 2 :(得分:3)
它似乎是一种特殊的保留IP地址。此链接可能包含更多信息Is 0.0.0.0 a valid IP address?。所以我怀疑它没有在Java中记录,因为它与实际的网络规范更相关。
正如其他人提到的那样,它似乎是查克诺里斯的IP地址:D
HTH