静态InetAddress.getLoopbackAddress()返回什么?

时间:2013-01-14 00:15:57

标签: java network-programming java-7

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

static InetAddress getLoopbackAddress()
Returns the loopback address.

现在我想知道结果中包含哪个地址,IP4或IP6。

documentation对这个主题有点模糊:

  

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

Java如何决定是返回127.0.0.1还是IPv6吊坠::1

或者它们都是由同一个InetAdress对象表示的?

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

3 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:4)

首先,.getLocalHost()和此方法之间存在根本区别:.getLocalHost()将获取使用计算机名称注册的地址,而.getLoopbackAddress()将返回仅限本地的环回地址。

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

System.setProperty("java.net.preferIPv4Stack" , "true");

答案 2 :(得分:4)

如果您有IPv6堆栈且Java未配置为更喜欢IPv4,则它将返回:: 1。

否则返回127.0.0.1。