任何人都知道为什么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。谢谢!
答案 0 :(得分:1)
因为您必须重新启动电脑或清除dns缓存以“应用”更改
答案 1 :(得分:1)
这可能是一个安全限制问题。来自javadoc:
如果有安全管理器,则调用其checkConnect方法 本地主机名和-1作为其参数,以查看操作是否 允许。如果不允许该操作,则表示InetAddress 返回环回地址。
答案 2 :(得分:1)
一个老问题,但也许这些信息对其他人有帮助 - 我很难找到任何地方记录的信息(可能因为它不是语言规范的正式部分),并且必须通过实验来确定。 / p>
如果问题不在于SecurityManager,那么最可能的问题是操作系统级别的名称解析会以某种方式搞砸。
至少在我测试过的所有Unix平台上(OS X,Solaris,Linux),Java使用的过程是:
我看到这被错误配置的/ etc / hosts破坏了,例如:
127.0.0.1 localhost myhost
1.2.3.4 myhost
准确地给出上述症状。
答案 3 :(得分:0)
首先 LocalHost将始终代表LoopBack地址127.0.0.1 (用于 调试TCP / IP堆栈。)当安全管理器发现不允许操作时。
对于您的LAN地址,请使用InetAddress.getByName("PC NAME").getHostAddress()
请用您的个人识别码替换PC NAME。
<强>例如强>
public class StrTest {
public static void main(String[] args) throws IOException {
System.out.println(InetAddress.getByName("Vicky-PC").getHostAddress());
}
}