任何人都知道为什么 InetAddress.getLocalHost() 总是返回 127.0.0.1 虽然我已经更改了 /etc/hosts 中的 ip?改变后
hostname -i
返回正确的 ip (192.168.xx),但 InetAddress.getLocalHost() 仍然是名称。
顺便说一句,我在 CentOS 6.2 上使用 jdk 1.6.0_31。谢谢!
因为您必须重新启动电脑或清除 dns 缓存才能“应用”更改
这可能是一个安全限制问题。从javadoc:
如果有安全管理器,则使用本地主机名和 -1 作为其参数调用其 checkConnect 方法,以查看是否允许该操作。如果不允许该操作,则返回表示环回地址的 InetAddress。
一个老问题,但也许这些信息对其他人有帮助 - 我一直在努力寻找任何地方记录的信息(可能是因为它不是语言规范的正式部分),并且必须通过实验来确定。
如果问题不在于 SecurityManager,那么最有可能的问题是您在操作系统级别的名称解析以某种方式搞砸了。
至少在我测试过的所有 Unix 平台(OS X、Solaris、Linux)上,Java 使用的进程是:
我已经看到配置错误的 /etc/hosts 破坏了这一点,例如:
127.0.0.1 localhost myhost
1.2.3.4 myhost
准确给出上述症状。
首先LocalHost总是代表LoopBack地址127.0.0.1(用来调试TCP/IP栈),当Security manager发现操作不被允许时。
对于您的 LAN 地址,请使用InetAddress.getByName("PC NAME").getHostAddress()
请将 PC NAME 替换为您的 PC 名称。
例如:
public class StrTest {
public static void main(String[] args) throws IOException {
System.out.println(InetAddress.getByName("Vicky-PC").getHostAddress());
}
}