Java网络编程基础InetAddress类的使用

  InetAddress类在网络API XML编程中配置了角色。参数提供给流导入类和自营导入器类构造器或非构造器方法的重要。InetAddress描述了32位或64位IP地址,要完成这个功能,InetAddress类主要依靠两个支持类Inet4Address和Inet6Address,这三个类是继承关系,InetAddress是父类,Inet4Address和Inet6Address是子类。
  由于InetAddress类只有一个构造函数,而且不能传入参数,所以不能直接创建InetAddress对象,比如下面的做法就是错误的:
  InetAddress ia=new InetAddress();
  但是我们可以通过下面的5个工厂方法创建来创建一个InetAddress对象或InetAddress数据库:
  .getAllByName(String host)方法返回一个InetAddress对象的引用,每个对象包含一个表示相应主机名的单独的IP地址,这个IP地址是通过主机参数传递的,对于指定的主机如果没有IP地址存在那么这个方法将抛出一个UnknownHostException异常对象
  。getByAddress(byte[]addr)方法返回一个InetAddress对象的引用,该对象包含了一个Ipv4地址或Ipv6地址,Ipv4地址是一个4字节地址数据库,Ipv6地址是一个16字节地址数据库,如果同时返回的数据库不是4字节的也不是16字节的,那么方法将会抛出一个UnknownHostException异常对象
  。getByAddress(String host,byte[]addr)方法返回一个InetAddress对象的引用,这个InetAddress对象包含了一个由主机和4字节的addr阵列指定的IP地址,或者是主机和16字节的addr阵列指定的IP地址IP地址,如果这个吞吐量既不是4字节的也不是16位字节的,那么该方法将抛出一个UnknownHostException异常对象
  。getByName(String host)方法返回一个InetAddress对象,该对象包含了一个与主机参数指定的主机相对应的IP地址,对于指定的主机如果不存在IP地址,那么该方法将抛出一个UnknownHostException异常对象
  。getLocalHost()方法返回一个InetAddress对象,这个对象包含了本地机的IP地址,到本地主机既是客户程序主机又是服务器程序主机,为了避免崩溃,我们将客户程序主机称为客户主机,将服务器程序主机主机名为服务器主机。
  上面讲到的方法均提到返回一个或多个InetAddress对象的引用,实际上每一个方法都要返回一个或多个Inet4Address/Inet6Address对象的引用,调用者不需要引用的子类型,相反调用者可以使用返回的引用调用InetAddress对象的非静态方法,包括子类型的多态以确保重载方法被调用。InetAddress和它的子类型对象处理主机名
  到主机IPv4或IPv6地址的转换,要完成这个转换需要使用域名系统,下面的代码示范了如何通过调用getByName(String host)方法获得InetAddress子类对象的方法,该对象包含了与主机参数相对应的IP地址:InetAddress ia=
  InetAddress.getByName("www.javajeff.com"));
  一但获得了InetAddress子类对象的引用就可以调用InetAddress的各种方法来获得InetAddress子类对象中的IP地址信息,比如,可以通过调用getCanonicalHostName()从域名服务中获取标准的主机名;getHostAddress()获取IP地址,getHostName()获取主机名,isLoopbackAddress()判断IP地址是否是一个loopback地址。List1是一段
  示范代码:
  //InetAddressDemo.java
  import java。网。*;
  类InetAddressDemo
  {
  public static void main(String[]args)throws UnknownHostException
  {
  String host="localhost";}
  if(args.length==1)
  主机=args[0];
  InetAddress ia=InetAddress.getByName(主机);
  System.out.println("规范主机名="+
  ia.getCanonicalHostName());
  System.out.println("主机地址="+
  ia.getHostAddress());
  System.out.println("主机名="+
  ia.getHostName());
  System.out.println("是否是环回地址="+
  ia.isLoopbackAddress());
  }
  }
  当无命令行参数时,代码输出类似下面的结果:
  Canonical Host Name=localhost
  Host Address=127.0.0.1
  Host Name=localhost
  Is Loopback Address=true
  InetAddressDemo给了你一个指定主机名作为命令行参数的选择,如果没有指定主机名,那么将使用localhost(主机的),InetAddressDemo通过调用getByName(String host)方法获得一个InetAddress子类对象的引用,通过此引用获得了标准主机名,主机地址,主机名以及IP地址是否是loopback地址的输出。