2013-03-22 91 views
0
String hostAddress = InetAddress.getLocalHost().getHostAddress(); 

上述代码在Java 1.7和1.6上的工作方式不同。在1.6中,它返回分配给系统的正确IP(10.4 ...)。在1.7中,它返回127.0.0.1。为什么InetAddress.getLocalHost()在Java 1.7中表现不同?

要解决此问题,我必须使用NetworkInterface.getNetworkInterfaces()并从中获取InetAddress。我会尝试连接到每个可用的InetAddress,直到成功。这很好,但我想知道为什么Java 1.7的行为不同?

任何帮助将是伟大的。

+0

在我的Ubuntu中,与OpenJDK的1.6.0_27,甲骨文的Java 1.6.0_33和OpenJDK的1.7.0_15这个返回127.0.1.1 – 2013-03-22 09:35:28

回答

1

这是因为JDK 7u4以来的变化。

的详细信息,请here

这是不是一个真正的错误,但在7U4行为改变。在7u4 之前,Linux实现使用gethostname,7u4使用 getnameinfo。这一变化是Mac端口的一个错误。

+0

这大约主机名的bug报告会谈没有主机地址。我有主机地址的问题。谢谢您的帮助。 – 2013-03-22 09:16:10

2

这很难说准确,但有几个想法:

docs

返回本地主机的地址。 这是通过从系统中检索主机的名称,然后将该名称解析为InetAddress来实现的。

将表明,通过@Jayamohan 提到的变化gethostname是相关的。


从文档

如果操作是不允许的

此外,返回表示环回地址的InetAddress。

这就是你所得到的。


127.0.0.1确实是您的机器(最有可能)的有效地址。在多地址系统中,JVM如何确定您想要的是哪个IP ?

More reading, similar question

相关问题