我不明白,为什么下面的代码打印0.0.9.229而不是127.0.0.1。任何人都能告诉我,热衷于解决这个问题吗?
String ha = InetAddress.getLocalHost().getHostAddress();
System.out.println(ha);
UPD: 代码在Ubuntu上运行
的/ etc /主机
127.0.0.1 localhost
127.0.1.1 2533
答案 0 :(得分:10)
InetAddress.getLocalHost()
并没有像大多数人认为的那样做。它实际上返回了机器的主机名,以及与该主机名关联的IP地址。这可能是用于连接外部世界的地址。它可能不会。这取决于您如何配置系统。
在我的Windowsbox上,它获取了机器名称和外部IP地址。在我的linux机器上它返回主机名和127.0.0.1因为我在/ etc / hosts
中设置了它答案 1 :(得分:3)
问题是我的主机名只包含数字而无法解析。 我在第一个位置用字符更改/ etc / hostname,问题解决了。
答案 2 :(得分:2)
使用NetworkInterface
枚举网络接口; InetAddress.getLocalHost()
始终返回环回。如果您想要使用NetworkInterface
获取与您的计算机相关联的所有IP,那么您也会获得127.0.0.1
。
Enumeration<NetworkInterface> nInterfaces = NetworkInterface.getNetworkInterfaces();
while (nInterfaces.hasMoreElements()) {
Enumeration<InetAddress> inetAddresses = nInterfaces.nextElement().getInetAddresses();
while (inetAddresses.hasMoreElements()) {
String address = inetAddresses.nextElement().getHostAddress();
System.out.println(address);
}
}