0
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 的行为不同?

任何帮助都会很棒。

4

2 回答 2

2

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

文档

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

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


也来自文档

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

这就是你得到的。


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

更多阅读,类似问题

于 2013-03-22T09:28:13.747 回答
1

这是因为自JDK 7u4.

详细信息可在此处获得

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

于 2013-03-22T09:07:59.893 回答