InetAddress.getLocalHost() java.net.UnknownHostException 异常

from: http://www.360doc.com/content/10/1118/18/2703996_70480884.shtml

昨天备机在连接ActiveMQ
的时候出现了“Reason:java.net.UnknownHostException:zw_65_43:”这样一个异常,上次碰到这个问题的时候只是在测试组的测试机器上,四台正式机都是对的,没有关注。

问题原因是在系统的/etc/Hostname中配置了“zw_65_43作为主机名,而在/etc/hosts文件中没有相应的“zw_65_43”。简单的解决办法是

对应关系配好就可以,甚至删除/etc/Hostname这个文件也可以。

深层的原因:在大多数Linux操作系统中,都是以/etc/hosts中的配置查找主机名的,但是Detian based system/etc/Hostname文件中的配置做主机名。

JavaInetAddress.java调用InetAddressImpl.javapublic native String getLocalHostName() throws UnknownHostException;来获取本地主机名, Java的这个方法是native的,是本地系统的一个实现,所以在本地配置出现问题的情况下,Java代码出现问题。

1. hostname查看本机名称,

a.若本机名称不是一个IP地址,比如是"sohu",则必须在/etc/hosts中配置sohu对应本机IP,否则java.net.InetAddress.getLocalHost会抛出java.net.UnknownHostException异常.

b.
若本机名称是一个IP地址,而且必须是本机某块网卡的
IP,

c.
第三种情况比较麻烦。倘若本机名称是一个IP地址,但不是本机某块网卡的IP,或者只是某个IP地址的一部分,比如192.168(这是我遇到过的),那么执行java.net.InetAddress.getLocalHost().getHostAddress()会得到192.0.0.168,java.net.InetAddress.getLocalHost().getHostAddress()不会抛出异常,但相关访问会停滞很久,原因是他在查找192.0.0.168这个地址,若网络中不存在这个地址,最终会抛出Connection timed out异常;若网络中存在这个地址,Connection refused to host这个异常将被抛出,这些显然都不是想要的


结论:
1.
设置本机名称:hostnamemName xxx最好不是写IP地址的形式,若写则必须是本机的完全IP形式(不要只写一半)
2.
/etc/hosts里加一行 本机
IP mName
3.
InetAddress.getLocalHost().getHostAddress()测试一下结果是否是与本机IP一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值