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表现不同?
任何帮助都会很棒。
答案 0 :(得分:2)
很难说清楚,但有一些想法:
来自docs:
返回本地主机的地址。 这是通过从系统中检索主机名称,然后将该名称解析为InetAddress来实现的。
表示@Jayamohan 提到的gethostname
的更改是相关的。
同样来自文档
如果不允许该操作,则返回表示环回地址的InetAddress。
这就是你得到的。
127.0.0.1确实是您机器的有效地址(最有可能)。在多地址系统中,JVM如何确定您想要的IP ?
答案 1 :(得分:1)
这是因为JDK 7u4
以来的变化。
详细信息可用here
这不是一个真正的错误,而是7u4中的行为改变。在7u4之前 Linux实现使用了gethostname,它使用的是7u4 getnameinfo会。此更改是Mac端口中出现的错误。