为什么InetAddress.getLocalHost().getHostAddress
返回与InetAddress.getByName("localhost")
不同的输出时为什么
为什么他们两个都不返回相同的?一个正在返回192.168.0.2
,而另一个正在返回127.0.0.1
最佳答案
看来,InetAddress.getLocalHost()。getHostAddress()返回您的系统IP和InetAddress.getByName(“ localhost”)回送地址。
我怀疑Parthian针对getByName描述的安全管理器案例,根据针对getByName()的InetAddress API规范:
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getByName%28java.lang.String%29
该方法引发:SecurityException-如果安全管理器存在并且其checkConnect方法不允许该操作。
而getLocalHost()不会引发任何此类异常,而是将回送地址返回为故障安全。
http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getLocalHost%28%29
getByName()需要连接到DNS才能解析主机名。
在这种情况下,getByName()从/ etc / hosts(linux)或C:\ Windows \ System32 \ drivers \ etc(windows)解析“ localhost”。主机名ip对是用户可在这些文件中配置的。
要进行检查,您可以向localhost提供任何值,例如:hosts文件中的localhost 127.0.0.2,getByName将返回它。