InetAddress.getLocalHost().getHostAddress()返回不需要的Java地址
我尝试了InetAddress.getLocalHost().getHostAddress()返回不需要的Java地址,java,network-programming,Java,Network Programming,我尝试了InetAddress.getLocalHost().getHostAddress()来获取用户的internet地址。它给了我127.0.1.1,但我正在寻找更像192.168.1.75的东西。知道我要找的地址吗?谢谢-泰勒 编辑: 我有ubuntu。记住这一点。我将我的程序导出到一个jar中,并在我妈妈的Windows笔记本电脑上运行。它告诉我正确的地址。即192.168.1.64。仍然不是我的正确版本。这意味着您以某种方式错误配置了本地解析器。 getLocalHost()应该返回
InetAddress.getLocalHost().getHostAddress()
来获取用户的internet地址。它给了我127.0.1.1
,但我正在寻找更像192.168.1.75
的东西。知道我要找的地址吗?谢谢-泰勒
编辑:
我有ubuntu。记住这一点。我将我的程序导出到一个jar中,并在我妈妈的Windows笔记本电脑上运行。它告诉我正确的地址。即
192.168.1.64
。仍然不是我的正确版本。这意味着您以某种方式错误配置了本地解析器。
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();
}
UnknownHostException
如果您的问题是1号,那么您需要将计算机的主机名更改为解决后的计算机IP号
如果您的问题是第2个,那么您需要确保您的代码获得适当的权限,例如通过对小程序或webstart应用程序进行签名。而不是InetAddress.getLocalHost(),您可以使用这样的代码来查找本地主机的第一个非环回但站点本地地址
话虽如此,根据您想要实现的目标,您最好使用InetAddress.getLoopbackAddress()-这取决于您是否需要一个可以从外部连接到的接口,或者只想拥有一个地址,例如系统上两个进程的通信地址。如果在本地运行此代码,您将获得127.0.1.1,但如果从远程pc运行,您将获得ip地址,即当前代码的ip地址为
192.168.1.75
。但是如果你真的需要你的外部ip,那么看看这篇文章http://stackoverflow.com/a/2939223/1262764
可能重复@AtulNar&Joe,但这不是重复;您指的是一个关于如何获取面向外部的IP地址的问题(在通过NAT路由器等之后)。OP没有表示这是他想要的;他似乎只想要本地网络接口卡的IP号。我想要我的本地IP,因为我有一个方法,可以在本地地址上的所有服务器上运行,而本地主机不会返回它。你必须使用192.168.1.75,因为它不是一种类型。我直接从控制台输出复制了它。我试试你的环回地址方法刚刚测试过,环回(InetAddress.getLoopbackAddress().getHostAddress()
)返回的是127.0.0.1
你的/etc/hostname
文件中有什么?ty-Satellite-C55-A
是我的主机名文件。同样在hosts文件中,我在前两行127.0.0.1localhost
和127.0.1.1ty-Satellite-C55-A
中找到了它;您已将计算机配置为将127.0.1.1
作为其地址。如果希望getLocalHost()
返回不同的地址,则需要更改/etc/hosts
文件并指向其真实IP地址(或者如果DNS设置正确,则可以删除/注释该行,并让DNS处理名称的解析)
} catch (java.lang.SecurityException e) {
return impl.loopbackAddress();
}