5

我不明白,为什么下面的代码打印 0.0.9.229 而不是 127.0.0.1。谁能告诉我,热修复?

String ha = InetAddress.getLocalHost().getHostAddress();
System.out.println(ha);

UPD:在 Ubuntu 上运行的代码

/etc/hosts

127.0.0.1       localhost
127.0.1.1       2533
4

3 回答 3

10

InetAddress.getLocalHost()不像大多数人认为的那样做。它实际上返回机器的主机名,以及与该主机名关联的 IP 地址。这可能是用于连接外部世界的地址。它可能不会。这仅取决于您如何配置系统。

在我的 windowsbox 上,它获取机器名称和外部 IP 地址。在我的 linux 机器上,它返回主机名和 127.0.0.1,因为我在 /etc/hosts 中设置了它

于 2013-08-28T13:13:04.543 回答
3

问题是我的主机名将仅包含数字并且无法解析。我用第一个位置的字符更改我的 /etc/hostname 并且问题已经解决。

于 2013-08-28T14:05:06.007 回答
2

用于NetworkInterface枚举网络接口;InetAddress.getLocalHost()总是返回环回。如果你想获得与你的机器使用相关的所有 IP, NetworkInterface那么你也会得到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);
        }
    }
于 2013-08-28T13:17:44.550 回答