Linux 上可能发生的情况是InetAddress.getLocalHost()
返回环回地址(在 127/8 中,通常为 127.0.0.1)。因此取自/etc/hosts
文件的名称很可能是localhost.localdomain
.
为了获得正确的地址/主机名,您可以改用以下代码,它将列出与网络接口关联的所有 IP 地址(eth0
在我的示例中),我们将选择不属于的 IPv4环回类。
try {
// Replace eth0 with your interface name
NetworkInterface i = NetworkInterface.getByName("eth0");
if (i != null) {
Enumeration<InetAddress> iplist = i.getInetAddresses();
InetAddress addr = null;
while (iplist.hasMoreElements()) {
InetAddress ad = iplist.nextElement();
byte bs[] = ad.getAddress();
if (bs.length == 4 && bs[0] != 127) {
addr = ad;
// You could also display the host name here, to
// see the whole list, and remove the break.
break;
}
}
if (addr != null) {
System.out.println( addr.getCanonicalHostName() );
}
} catch (...) { ... }
您可以稍微更改代码以显示所有地址,请参阅代码中的注释。
编辑
正如@rafalmag 所建议的,您可能还想迭代其他网卡
而不是 NetworkInterface.getByName("eth0") 我建议迭代 NetworkInterface.getNetworkInterfaces()