7

Java 7 为该类添加了一个新的静态方法java.net.InetAddress

static InetAddress getLoopbackAddress()
Returns the loopback address.

现在我想知道结果中将包含什么地址,IP4 或 IP6 的地址。

文档在这个主题上有点模糊:

返回的 InetAddress 将表示 IPv4 环回地址 127.0.0.1 或 IPv6 环回地址 ::1。返回的 IPv4 环回地址只是 127 格式的众多地址之一.*

Java 如何决定是返回127.0.0.1还是 IPv6 挂件::1

还是它们都由同一个 InetAdress 对象表示?

结果总是一样吗?这取决于我的网卡吗?

4

3 回答 3

10

我相信这里给出的其他答案是错误的。

默认情况下,Java更喜欢 IPv6 堆栈(如果可用),但更喜欢 IPv4 地址。注意细微的差别。这由java.net.preferIPv4Stackjava.net.preferIPv6Addresses系统属性控制,两者都默认为 false。

因此,InetAddress.getLoopbackAddress()几乎总是会返回一个 IPv4 地址。您必须将java.net.preferIPv6Addresses系统属性设置true为才能使其返回 IPv6 地址。

我在 JDK 源代码中看不到此方法的结果有任何操作系统依赖性。我想不出Java不会(使用默认设置)为此方法返回IPv4地址的操作系统。

于 2014-02-05T07:32:34.507 回答
4

.getLocalHost()首先,和 这个方法有一个根本的区别:将获取使用机器名.getLocalHost()注册的地址,而将返回仅限本地的环回地址。.getLoopbackAddress()

至于返回的地址,它取决于操作系统。-Djava.net.preferIPv4Stack=true但是,您可以通过传递给 JVM 参数或使用以下命令来影响 JVM 优先使用 IPv4 :

System.setProperty("java.net.preferIPv4Stack" , "true");
于 2013-01-14T01:09:01.013 回答
4

如果您有 IPv6 堆栈并且 Java 未配置为首选 IPv4,它将返回 ::1。

否则它将返回 127.0.0.1。

于 2013-01-16T00:02:34.270 回答