我尝试InetAddress.getLocalHost().getHostAddress()
来获取用户的互联网地址。它给了我127.0.1.1
,但我正在寻找更像192.168.1.75
的东西。知道如何获得我正在寻找的地址吗?谢谢 - 泰勒
编辑:
我有ubuntu。记住这一点。我将我的程序导出到一个罐子里并在我妈妈的Windows笔记本电脑上运行它。它给我一个正确的地址。那是192.168.1.64
。我的仍然不是正确的。
答案 0 :(得分:2)
这意味着您以某种方式错误配置了本地解析程序。
getLocalHost()
应该返回真实的本地IP地址,getLoopbackAddress()
返回环回地址,通常是127.0.0.1
(你说你得到127.0.1.1
;虽然这不是不可能的,但我仍然认为这是一个错字?)
您可以在getLocalHost()
的Java代码中识别出一些情况,这些情况会使其返回环回地址而不是实际地址:
本地主机名设置为localhost
String local = impl.getLocalHostName();
// [...]
if (local.equals("localhost")) {
return impl.loopbackAddress();
}
您的代码无权获取本地主机地址(可能是没有权限的applet或Java WebStart应用程序)
} catch (java.lang.SecurityException e) {
return impl.loopbackAddress();
}
但是,在其他情况下,它应该抛出UnknownHostException
。
如果您的问题是1号,那么您需要将计算机的主机名更改为可以解析为计算机IP号的内容。
如果您的问题是2号,那么您需要确保您的代码获得适当的权限,例如签署applet或webstart应用程序。
答案 1 :(得分:0)
您可以使用InetAddressLocalHostUtil.java之类的代码来代替InetAddress.getLocalHost()来查找本地主机的第一个非环回但站点本地地址...
话虽如此,根据您想要实现的目标,您可能最好只使用InetAddress.getLoopbackAddress() - 这取决于您是否需要可以连接到外部的接口,或者只是想拥有一个地址例如用于系统上的两个进程进行通信。