InetAddress.getLocalHost()。getHostAddress()返回不需要的地址Java

时间:2014-11-29 07:55:20

标签: java network-programming

我尝试InetAddress.getLocalHost().getHostAddress()来获取用户的互联网地址。它给了我127.0.1.1,但我正在寻找更像192.168.1.75的东西。知道如何获得我正在寻找的地址吗?谢谢 - 泰勒

编辑: 我有ubuntu。记住这一点。我将我的程序导出到一个罐子里并在我妈妈的Windows笔记本电脑上运行它。它给我一个正确的地址。那是192.168.1.64。我的仍然不是正确的。

2 个答案:

答案 0 :(得分:2)

这意味着您以某种方式错误配置了本地解析程序。 getLocalHost()应该返回真实的本地IP地址,getLoopbackAddress()返回环回地址,通常是127.0.0.1(你说你得到127.0.1.1;虽然这不是不可能的,但我仍然认为这是一个错字?)

您可以在getLocalHost()的Java代码中识别出一些情况,这些情况会使其返回环回地址而不是实际地址:

  1. 本地主机名设置为localhost

        String local = impl.getLocalHostName();
        // [...]
        if (local.equals("localhost")) {
            return impl.loopbackAddress();
        }
    
  2. 您的代码无权获取本地主机地址(可能是没有权限的applet或Java WebStart应用程序)

    } catch (java.lang.SecurityException e) {
        return impl.loopbackAddress();
    }
    
  3. 但是,在其他情况下,它应该抛出UnknownHostException

    如果您的问题是1号,那么您需要将计算机的主机名更改为可以解析为计算机IP号的内容。

    如果您的问题是2号,那么您需要确保您的代码获得适当的权限,例如签署applet或webstart应用程序。

答案 1 :(得分:0)

您可以使用InetAddressLocalHostUtil.java之类的代码来代替InetAddress.getLocalHost()来查找本地主机的第一个非环回但站点本地地址...

话虽如此,根据您想要实现的目标,您可能最好只使用InetAddress.getLoopbackAddress() - 这取决于您是否需要可以连接到外部的接口,或者只是想拥有一个地址例如用于系统上的两个进程进行通信。