日期:2014-05-20  浏览次数:20848 次

java.net.UnknownHostException
java.net.UnknownHostException异常复现的问题(迫使出现这个异常)
Linux32 OS:

java.net.UnknownHostException: tdy218:tdy218 //tdy218为我的主机名(运行hostname的输出结果)
at java.net.InetAddress.getLocalHost(InetAddress.java :1308)

开始我一直在看/etc/hosts文件(/etc/sysconfig/network保持默认),并且不断的修改有关主机名对应IP的位置
Java code

127.0.0.1              localhost.localdomain localhost
192.168.1.18           tdy218


后来保持etc/hosts文件为原始状态,修改/etc/sysconfig/network
Java code

NETWORKING=yes
HOSTNAME=tdy218    


但是怎么改都没发生异常,失望!~
这两种方式均可使hostname命令显示主机名为:tdy218
但是后来我又搜搜网上的有关这个异常信息,我就发现我忽视了一个问题,那就是权限的问题,可能/etc/sysconfig/network和/etc/hosts都禁止普通用户访问,于是我
#ls -l /etc/sysconfig/network
显示-rw-r--r-- 也就是所有用户都有读的权限。
#ls -l /etc/hosts
同样显示-rw-r--r-- 也就是所有用户都有读的权限。

于是我通过chmod命令将这两个文件对普通用户去掉所有的权限
#chmod 600 /etc/sysconfig/network
#ls -l /etc/sysconfig/network
显示-rw------- root用户保留读写权限,普通用户去掉所有的权限。
#chmod 600 /etc/hosts
#ls -l /etc/hosts
显示-rw------- root用户保留读写权限,普通用户去掉所有的权限。

结果在普通用户下运行测试程序,依旧没报错!
郁闷!
测试结果表明,InetAddress类getLocalHost()方法时与那两个文件无关!但
java.net.UnknownHostException: tdy218:tdy218 //tdy218为我的主机名(运行hostname的输出结果)
的出现,却是怪事儿!
是否与系统上其他的文件有关?
测试程序:
Java code

import java.net.InetAddress;
public class getLocalHostException{
    public static void main(String tdy218[])
    {
        try
        {    
          
          String ip = InetAddress.getLocalHost().getHostAddress();
          String hostname = InetAddress.getLocalHost().getHostName();
          System.out.println("getLocalHost()返回:"+InetAddress.getLocalHost());
          System.out.println("HostName:"+hostname+"\n"+"IP:"+ip);
        }
        catch(Exception e)
        {
          System.out.println(e.getMessage());    
        }                        
    }            
}




或许该测试程序不够接近异常,或许...
大家能否提出一个解决办法或者思路看看这个问题该咋办.


------解决方案--------------------
是挺奇怪的..
在InetAddress源码中:
String local = impl.getLocalHostName();
InetAddress[] localAddrs;
try {
localAddrs =
(InetAddress[]) InetAddress.getAddressFromNameService(local, null);
} catch (UnknownHostException uhe) {
throw new UnknownHostException(local + ": " + uhe.getMessage());
}

你的错误信息:java.net.UnknownHostException: tdy218:tdy218
local正常显示了,应该说明HOSTNAME=tdy218读取没有问题
所以出错点应该在 localAddrs =(InetAddress[]) InetAddress.getAddressFromNameService(local, null);
也就是在取local的ip时异常了

再具体的还有待研究,希望能对你有所帮助
------解决方案--------------------
我也遇到这问题,一直没有解决~~关注中
------解决方案--------------------
路过,帮忙顶一下,看司令来否!