Java InetAddress.getLocalHost()始终返回127.0.0.1

Java InetAddress.getLocalHost()始终返回127.0.0.1,java,centos,Java,Centos,有人知道为什么InetAddress.getLocalHost()总是返回127.0.0.1,尽管我在/etc/hosts中更改了ip?变动后 hostname -i 返回正确的ip(192.168.x.x),但InetAddress.getLocalHost()仍然是名称 顺便说一下,我正在CentOS 6.2上使用JDK1.6.031。谢谢 因为您必须重新启动电脑或清除dns缓存才能“应用”更改这可能是一个安全限制问题。从: 如果存在安全管理器,则使用调用其checkConnect方法 本

有人知道为什么InetAddress.getLocalHost()总是返回127.0.0.1,尽管我在/etc/hosts中更改了ip?变动后

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


顺便说一下,我正在CentOS 6.2上使用JDK1.6.031。谢谢

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

这可能是一个安全限制问题。从:

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

  • 首先,LocalHost将始终表示环回地址127.0.0.1(用于 调试TCP/IP堆栈。)当安全管理器发现不允许该操作时

  • 对于LAN地址,请使用
    InetAddress.getByName(“PC名称”).getHostAddress()

    请用您的电脑名替换电脑名。

  • 例如:

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

    这是一个老问题,但可能这些信息会对其他人有所帮助——我一直在努力寻找记录在任何地方的信息(可能是因为它不是语言规范的正式部分),并且必须通过实验来确定

    如果问题不在于SecurityManager,那么最有可能的问题是您在操作系统级别的名称解析不知怎么搞砸了

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

  • 确定本地主机名
  • 通过/etc/hosts解决该问题,以确定IP地址
  • 我见过配置不当的/etc/hosts破坏了这一点,例如:

    127.0.0.1 localhost myhost
    1.2.3.4   myhost
    

    给出上述症状。

    您重新启动网络服务了吗?谢谢@Jeshurun的回复。我重新启动了服务器。谢谢回复。我已使用以下命令重新启动服务器并清除缓存:service nscd restart。但是还是一样,谢谢你的回复。你知道我怎么检查安全限制吗?@Jingwei:关于安全管理器的链接可能会对你有所帮助。谢谢@Keppil。我正在命令行中运行rmi测试用例,以最小化任何容器的影响。根据链接
    ,web小程序通常使用浏览器或Java web Start插件提供的安全管理器运行。其他类型的应用程序通常在没有安全管理器的情况下运行,除非应用程序本身定义了安全管理器。
    我不应该使用任何安全管理器。为了再次确认这一点,我检查了
    System.getSecurityManager()
    的值,该值返回null。因此,我不认为这是因为SecurityManager。谢谢您的回复。问题是它是java的RMI实现的一部分,我无法更改。