问题描述
我凭经验发现
Endpoint endpoint1 = Endpoint.create(new Ping());
endpoint1.publish("http://0.0.0.0:8080/ws/ping");
绑定到当前计算机上的所有网络接口(而不仅仅是 localhost - 127.0.0.1 或主机名),但我无法找到说明这是有保证的文档.
binds to all network interfaces on the current computer (instead of just localhost - 127.0.0.1 or the hostname), but I have not been able to locate the documentation which says that this is guaranteed.
问题:在 Java 中绑定到 0.0.0.0 将始终绑定到所有网络接口是在哪里定义的?
Question: Where is it defined that binding to 0.0.0.0 in Java will always bind to all network interfaces?
推荐答案
使用 0.0.0.0
只会绑定到支持 IPv4 的接口.但是,如果您绑定到 ::
,则应该涵盖所有 IPv4 和 IPv6 接口,假设您的 TCP/IP 堆栈(和 Java)启用了与 IPv4 兼容的 IPv6 套接字.
Using 0.0.0.0
will only bind to IPv4-enabled interfaces. However, if you bind to ::
, that should cover all IPv4 and IPv6 interfaces, assuming your TCP/IP stack (and Java) have IPv4-compatible IPv6 sockets enabled.
您需要查看内核(或套接字库,如果您使用的是 Windows)以了解为什么".在我的 OS X 系统上,man
页面解释了它.
You'll need to look to the kernel (or socket libraries, if you're on Windows) for an explanation of "why". On my OS X system, the man
pages explain it.
来自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 是否保证绑定到所有网络接口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!