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对象表示的?
结果总是一样吗?它取决于我的网卡吗?
答案 0 :(得分:8)
我相信这里给出的其他答案是错误的。
Java,默认情况下,更喜欢IPv6堆栈(如果可用),但更喜欢IPv4地址。注意细微差别。这由java.net.preferIPv4Stack
和java.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。