InetAddress.getLocalHost()始终返回127.0.0.1

时间:2012-07-21 14:17:30

标签: java centos

任何人都知道为什么InetAddress.getLocalHost()总是返回127.0.0.1虽然我已经更改了/ etc / hosts中的ip?改变后

hostname -i

返回正确的ip(192.168.x.x),但InetAddress.getLocalHost()仍然是名称。

顺便说一下,我在CentOS 6.2上使用jdk 1.6.0_31。谢谢!

4 个答案:

答案 0 :(得分:1)

因为您必须重新启动电脑或清除dns缓存以“应用”更改

答案 1 :(得分:1)

这可能是一个安全限制问题。来自javadoc

  

如果有安全管理器,则调用其checkConnect方法   本地主机名和-1作为其参数,以查看操作是否   允许。如果不允许该操作,则表示InetAddress   返回环回地址。

答案 2 :(得分:1)

一个老问题,但也许这些信息对其他人有帮助 - 我很难找到任何地方记录的信息(可能因为它不是语言规范的正式部分),并且必须通过实验来确定。 / p>

如果问题不在于SecurityManager,那么最可能的问题是操作系统级别的名称解析会以某种方式搞砸。

至少在我测试过的所有Unix平台上(OS X,Solaris,Linux),Java使用的过程是:

  1. 确定本地主机名
  2. 通过/ etc / hosts解析确定IP地址
  3. 我看到这被错误配置的/ etc / hosts破坏了,例如:

    127.0.0.1 localhost myhost
    1.2.3.4   myhost
    

    准确地给出上述症状。

答案 3 :(得分:0)

  1. 首先 LocalHost将始终代表LoopBack地址127.0.0.1 (用于 调试TCP / IP堆栈。)当安全管理器发现不允许操作时。

  2. 对于您的LAN地址,请使用InetAddress.getByName("PC NAME").getHostAddress()

    请用您的个人识别码替换PC NAME。

  3. <强>例如

    public class StrTest {
    
    
        public static void main(String[] args) throws IOException {
    
    
                System.out.println(InetAddress.getByName("Vicky-PC").getHostAddress());
    
        }
    
    }