欢迎访问北大青鸟鲁广校区~

  1. 加入收藏
  2. 设为主页
  3. 学校简介

三分钟了解北大青鸟

×
  • 北大青鸟大数据课程
  • 北大青鸟网络工程师
  • 北大青鸟web设计专业
  • 北大青鸟PHP专业
  • 北大青鸟启蒙星课程

JAVA教程:创建InetAddress对象的四个静态方法

责任编辑:027hpedu来源:北大青鸟鲁广校区Java技术教程发布时间:2014-04-29 10:00
导读:InetAddress类是Java中用于描述IP地址的类。它在java.net包中。如何创建InetAddress类,需要四个方法。北大青鸟鲁广校区专业老师给大家讲解这四个静态方法。

  InetAddress类是Java中用于描述IP地址的类。它在java.net包中。在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两个类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法。InetAddress可以通过getLocalHost方法得到本机的InetAddress对象,也可以通过getByName、getAllByName和getByAddress得到远程主机的InetAddress对象。
 

  一、getLocalHost方法

  使用getLocalHost可以得到描述本机IP的InetAddress对象。这个方法的定义如下:

  public static InetAddress getLocalHost() throws UnknownHostException

  这个方法抛出了一个UnknownHostException异常,因此,必须在调用这个方法的程序中捕捉或抛出这个异常。下面的代码演示了如何使用getLocalHost来得到本机的IP和计算机名。

  package inet;

  import java.net.*;

  public class MyInetAddress1

  {

  public static void main(String[] args) throws Exception

  {

  InetAddress localAddress = InetAddress.getLocalHost();

  System.out.println(localAddress);

  }

  }

  运行结果:

  ComputerName/192.168.18.10

  在InetAddress类中覆盖了Object类的toString方法,实现如下:

  public String toString()

  {

  return ((hostName != null) ? hostName : "") + "/" + getHostAddress();

  }

  从上面的代码可以看出,InetAddress方法中的toString方法返回了用“/“隔开的主机名和IP地址。因此,在上面的代码中直接通过localAddress对象来输出本机计算机名和IP地址(将对象参数传入println方法后,println方法会调用对象参数的toString方法来输出结果)。

  当本机绑定了多个IP时,getLocalHost只返回个IP。如果想返回本机部的IP,可以使用getAllByName方法。
 

  二、getByName方法

  这个方法是InetAddress类常用的方法。它可以通过指定域名从DNS中得到相应的IP地址。getByName一个String类型参数,可以通过这个参数指定远程主机的域名,它的定义如下:

  public static InetAddress getByName(String host) throws UnknownHostException

  如果host所指的域名对应多个IP,getByName返回个IP。如果本机名已知,可以使用getByName方法来代替getLocalHost。当host的值是localhost时,返回的IP一般是127.0.0.1。如果host是不存在的域名,getByName将抛出UnknownHostException异常,如果host是IP地址,无论这个IP地址是否存在,getByName方法都会返回这个IP地址(因此getByName并不验证IP地址的正确性)。下面代码演示了如何使用getByName方法:

  package inet;

  import java.net.*;

  public class MyInetAddress2

  {

  public static void main(String[] args) throws Exception

  {

  if (args.length == 0)

  return;

  String host = args[0];

  InetAddress address = InetAddress.getByName(host);

  System.out.println(address);

  }

  }

  测试1:远程主机www.csdn.net

  执行如下命令:

  java inet.MyInetAddress2 www.csdn.net

  运行结果:

  www.csdn.net/211.100.26.124

  测试2:本机名ComputerName

  执行如下命令:

  java inet.MyInetAddress2 ComputerName

  运行结果:

  ComputerName/192.168.18.10

  测试3:代表本机的localhost

  执行如下命令:

  java inet.MyInetAddress2 localhost

  运行结果:

  localhost/127.0.0.1

  对于本机来说,除了可以使用本机名或localhost外,还可以在hosts文件中对本机做“IP/域名”映射(在Windows操作系统下)。这个文件在C:\WINDOWS\system32\drivers\etc中。打开这两个文件中,在后加一行如下所示的字符串:

  192.168.18.100 www.mysite.com

  测试4:本机域名www.mysite.com

  执行如下命令:

  java inet.MyInetAddress2 www.mysite.com

  运行结果:

  www.mysite.com/192.168.18.100

  getByName方法除了可以使用域名作为参数外,也可以直接使用IP地址作为参数。如果使用IP地址作为参数,输出InetAddress对象时域名为空(除非调用getHostName方法后,再输出InetAddress对象。getHostName方法将在下面的内容介绍)。读者可以使用129.42.58.212作为MyInetAddress2的命令行参数(这是www.ibm.com的IP),看看会得到什么结果。
 

  三、getAllByName方法

  使用getAllByName方法可以从DNS上得到域名对应的所有的IP。这个方法返回一个InetAddress类型的数组。这个方法的定义如下:

  public static InetAddress[] getAllByName(String host) throws UnknownHostException

  与getByName方法一样,当host不存在时,getAllByName也会抛出UnknowHostException异常,getAllByName也不会验证IP地址是否存在。下面的代码演示了getAllByName的用法:

  package inet;

  import java.net.*;

  public class MyInetAddress3

  {

  public static void main(String[] args) throws Exception

  {

  if (args.length == 0)

  return;

  String host = args[0];

  InetAddress addresses[] = InetAddress.getAllByName(host);

  for (InetAddress address : addresses)

  System.out.println(address);

  }

  }

  测试1:远程主机www.csdn.net

  执行如下命令:

  java inet.MyInetAddress3 www.csdn.net

  运行结果:

  www.csdn.net/211.100.26.124

  www.csdn.net/211.100.26.121

  www.csdn.net/211.100.26.122

  www.csdn.net/211.100.26.123

  将上面的运行结果和例程3-2的测试1的运行结果进行比较,可以得出一个结论,getByName方法返回的IP地址就是getAllByName方法返回的个IP地址。事实上,getByName的确是这样实现的,getByName的实现代码如下:

  public static InetAddress getByName(String host) throws UnknownHostException

  {

  return InetAddress.getAllByName(host)[0];

  }

  测试2:使用www.csdn.net的一个IP

  执行如下命令:

  java inet.MyInetAddress3 211.100.26.122

  运行结果:

  /211.100.26.122
 

  四、getByAddress方法

  这个方法必须通过IP地址来创建InetAddress对象,而且IP地址必须是byte数组形式。getByAddress方法有两个重载形式,定义如下:

  public static InetAddress getByAddress(byte[] addr) throws UnknownHostException

  public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException

  个重载形式只需要传递byte数组形式的IP地址,getByAddress方法并不验证这个IP地址是否存在,只是简单地创建一个InetAddress对象。addr数组的长度必须是4(IPv4)或16(IPv6),如果是其他长度的byte数组,getByAddress将抛出一个UnknownHostException异常。第二个重载形式多了一个host,这个host和getByName、getAllByName方法中的host的意义不同,getByAddress方法并不使用host在DNS上查找IP地址,这个host只是一个用于表示addr的别名。下面的代码演示了getByAddress的两个重载形式的用法:

  package inet;

  import java.net.*;

  public class MyInetAddress4

  {

  public static void main(String[] args) throws Exception

  {

  byte ip[] = new byte[] { (byte) 141, (byte) 146, 8 , 66};

  InetAddress address1 = InetAddress.getByAddress(ip);

  InetAddress address2 = InetAddress.getByAddress("Oracle官方网站", ip);

  System.out.println(address1);

  System.out.println(address2);

  }

  }

  上面代码的运行结果如下:

  /141.146.8.66

  Oracle官方网站/141.146.8.66

  从上面的运行结果可以看出,getByAddress只是简单地将host参数作为域名放到“/”前面,因此,host可以是任何字符串。

  武汉北大青鸟鲁广校区,专业老师会帮你找到适合自己学习的课程和就业方向,详细了解JAVA教程中的小问题,现在就与专业老师在线老师沟通或拨打电话:027-87807717,或QQ咨询:027-87807717.

本文标题:JAVA教程:创建InetAddress对象的四个静态方法,责任编辑:027hpedu,于2014年04月29日10时00分发布于北大青鸟鲁广校区。武汉北大青鸟宏鹏鲁广校区,是北大青鸟武汉电脑学校,专业IT计算机培训,拥有软件/网络/安卓/Web前端/Java课程.北大青鸟地址:光谷广场鲁巷数码港.电话:027-87807717

专业老师指导

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业。

培训咨询客服

刘老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑。

本文地址:
文章标题:
  • 北大青鸟Java软件开发
  • 北大青鸟UI设计课程_零基础可学
  • 北大青鸟动漫设计_武汉设计学校
  • 北大青鸟数字艺术_武汉电脑学校
×
在线咨询更多问题

如您有任何疑问
在线咨询随时为您解答或拨打咨询热线:17740513250

×
  • 姓 名*
  • 手 机*
  • QQ号/微信号
  • 所报学科 *
  • 其他备注
  • 温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。