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的位置127.0.0.1              localhost.localdomain localhost
192.168.1.18           tdy218后来保持etc/hosts文件为原始状态,修改/etc/sysconfig/networkNETWORKING=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的输出结果)
的出现,却是怪事儿!
是否与系统上其他的文件有关?
测试程序: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());
}
}
}或许该测试程序不够接近异常,或许...
大家能否提出一个解决办法或者思路看看这个问题该咋办.

解决方案 »

  1.   

    ubuntu就是这个挫样哇
    你换一个主机名看看可以不?
    sudo /bin/hostname xxxxxxx
      

  2.   

    把下面这个东西加到你的  /etc/hosts file 44看额127.0.0.1    tdy218
      

  3.   

    请注意这里:补充:OS为Red Hat Linux AS4
      

  4.   


    我已经测试过(修改/etc/hosts文件)的:
    1.
    127.0.0.1    tdy218  localhost.localdomain  localhost
    2.
    127.0.0.1    localhost.localdomain   tdy218  localhost
    3.
    127.0.0.1    localhost.localdomain    localhost
    192.168.1.18  tdy218 
    4.
    192.168.1.18  tdy218 
    127.0.0.1    localhost.localdomain    localhost
    5.
    127.0.0.1    localhost.localdomain    localhost
    192.168.1.18  tdy218 
    6.
    192.168.1.18  tdy218  localhost.localdomain  localhost
    7.
    192.168.1.18  localhost.localdomain  tdy218  localhost可能的组合我都改过了,而且
    #chmod 600 /etc/sysconfig/network 
    #ls -l /etc/sysconfig/network 
    显示-rw-------  root用户保留读写权限,普通用户去掉所有的权限。 
    #chmod 600 /etc/hosts 
    #ls -l /etc/hosts 
    显示-rw-------  root用户保留读写权限,普通用户去掉所有的权限。而且/etc/sysconfig/network 也进行过测试验证,在其他用户下执行那个程序还是没报错。
    郁闷!请大家继续回复...
      

  5.   

    是挺奇怪的..
    在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时异常了再具体的还有待研究,希望能对你有所帮助
      

  6.   

    hosts里面的东西太多了,理一下,删除不要的
    就留一行就成了。另外ping一下主机与IP都得通再从其它机器ping一下看。