为什么InetAddress.getLocalHost()在Java 1.7中表现不同?

时间:2013-03-22 09:02:44

标签: java networking java-7

String hostAddress = InetAddress.getLocalHost().getHostAddress();

上面的代码在Java 1.7和1.6上的工作方式不同。在1.6中,它返回分配给系统的正确IP(10.4 ...)。在1.7中,它返回127.0.0.1。

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

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

很难说清楚,但有一些想法:

来自docs

  

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

表示@Jayamohan 提到的gethostname的更改是相关的。


同样来自文档

  

如果不允许该操作,则返回表示环回地址的InetAddress。

这就是你得到的。


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

More reading, similar question

答案 1 :(得分:1)

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

详细信息可用here

  

这不是一个真正的错误,而是7u4中的行为改变。在7u4之前   Linux实现使用了gethostname,它使用的是7u4   getnameinfo会。此更改是Mac端口中出现的错误。