Java网络编程基本(一) InetAddress类的利用
当前位置:以往代写 > JAVA 教程 >Java网络编程基本(一) InetAddress类的利用
2019-06-14

Java网络编程基本(一) InetAddress类的利用

Java网络编程基本(一) InetAddress类的利用

InetAddress类在网络API套接字编程中饰演了一个重要脚色。

参数通报给流套接字类和自寻址套接字类结构器或非结构器要领。InetAddress描写了32位或64位IP地点,要完成这个成果,InetAddress类主要依靠两个支持类Inet4Address 和 Inet6Address,这三个类是担任干系,InetAddrress是父类,Inet4Address 和 Inet6Address是子类。

由于InetAddress类只有一个结构函数,并且不能通报参数,所以不能直接建设InetAddress工具,好比下面的做法就是错误的:

InetAddress ia = new InetAddress ();

但我们可以通过下面的5个工场要领建设来建设一个InetAddress工具或InetAddress数组:

. getAllByName(String host)要领返回一个InetAddress工具的引用,每个工具包括一个暗示相应主机名的单独的IP地点,这个IP地点是通过host参数通报的,对付指定的主机假如没有IP地点存在那么这个要领将抛出一个UnknownHostException 异常工具。

. getByAddress(byte [] addr)要领返回一个InetAddress工具的引用,这个工具包括了一个Ipv4地点或Ipv6地点,Ipv4地点是一个4字节数组,Ipv6地点是一个16字节地点数组,假如返回的数组既不是4字节的也不是16字节的,那么要领将会抛出一个UnknownHostException异常工具。

. getByAddress(String host, byte [] addr)要领返回一个InetAddress工具的引用,这个InetAddress工具包括了一个由host和4字节的addr数组指定的IP地点,可能是host和16字节的addr数组指定的IP地点,假如这个数组既不是4字节的也不是16位字节的,那么该要领将抛出一个UnknownHostException异常工具。

. getByName(String host)要领返回一个InetAddress工具,该工具包括了一个与host参数指定的主机相对应的IP地点,对付指定的主机假如没有IP地点存在,那么要领将抛出一个UnknownHostException异常工具。

. getLocalHost()要领返回一个InetAddress工具,这个工具包括了当地机的IP地点,思量到当田主机既是客户措施主机又是处事器措施主机,为制止杂乱,我们将客户措施主机称为客户主机,将处事器措施主机称为处事器主机。

上面讲到的要领均提到返回一个或多个InetAddress工具的引用,实际上每一个要领都要返回一个或多个Inet4Address/Inet6Address工具的引用,挪用者不需要知道引用的子范例,相反挪用者可以利用返回的引用挪用InetAddress工具的非静态要领,包罗子范例的多态以确保重载要领被挪用。

InetAddress和它的子范例工具处理惩罚主机名到主机IPv4或IPv6地点的转换,要完成这个转换需要利用域名系统,下面的代码示范了如何通过挪用getByName(String host)要领得到InetAddress子类工具的要领,这个工具包括了与host参数相对应的IP地点:

InetAddress ia = InetAddress.getByName ("www.javajeff.com"));

一但得到了InetAddress子类工具的引用就可以挪用InetAddress的各类要领来得到InetAddress子类工具中的IP地点信息,好比,可以通过挪用getCanonicalHostName()从域名处事中得到尺度的主机名;getHostAddress()得到IP地点,getHostName()得到主机名,isLoopbackAddress()判定IP地点是否是一个loopback地点。

List1 是一段示范代码:

// InetAddressDemo.java
import java.net.*;
class InetAddressDemo
{
 public static void main (String [] args) throws UnknownHostException
 {
  String host = "localhost";
  if (args.length == 1)
   host = args [0];
  InetAddress ia = InetAddress.getByName (host);
  System.out.println ("Canonical Host Name = " +
        ia.getCanonicalHostName ());
  System.out.println ("Host Address = " +
        ia.getHostAddress ());
  System.out.println ("Host Name = " +
        ia.getHostName ());
  System.out.println ("Is Loopback Address = " +
        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地点的输出。

    关键字:

在线提交作业