Java 8中InetAddress.getLocalHost()。getHostName()的不良行为

时间:2016-03-21 12:21:50

标签: java networking network-programming hosts inetaddress

我需要知道当前计算机的名称。

最简单的方法是运行:

java.net.InetAddress.getLocalHost().getHostName()

在Linux机器上使用OpenJDK 7,结果是正确的,如系统命令hostname所报告的那样。

但是使用OpenJDK 8,返回的名称是localhost,这是无用的。

为什么不同的行为? 如何使用Java 8获得真实姓名?

相关问题:

2 个答案:

答案 0 :(得分:0)

尝试使用getCanonicalHostName()而不是getHostName()

答案 1 :(得分:-1)

我的/etc/hosts文件是这样的:

127.0.0.1           localhost localhost.localdomain localhost4 localhost4.localdomain4 myserver

然后:

InetAddress.getLocalHost().getHostName().equals("localhost")

如果我将其更改为:

127.0.0.1           myserver localhost localhost.localdomain localhost4 localhost4.localdomain4

然后:

InetAddress.getLocalHost().getHostName().equals("myserver")

Java 8对排序比对Java 7更敏感,后者总是返回正确的结果。

更新:进一步调查显示,使用CentOS 6时,这就是行为:Java 8依赖于排序。在CentOS 7中,Java 8的工作方式与Java 7类似。