创建InetAddress对象的四个静态方法[通俗易懂]

创建InetAddress对象的四个静态方法[通俗易懂]InetAddress类是Java中用于描述IP地址的类。它在java.net包中。在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两个类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法。InetAddress可以通过getLocalH

大家好,又见面了,我是你们的朋友全栈君。

  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可以是任何字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152237.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • qxdm使用教程_log命令

    qxdm使用教程_log命令(一)、首先保证PC机和手机串口(或并口)之间连接畅通,这个可以从QXDM工具的系统栏看出,如果是MSM6000的项目,系统栏会显示“COMX:SURF6000-ZRF6000”;如果是MSM6025的项目,系统栏会显示“COMX:SURF6025-ZRF6025”。其中X为某个串口,比如COM1,X=1等。(二)、QXDM打开后,先配置好messageview要打印的信息,具体的配置如

    2022年10月2日
  • tomcat日志详解[通俗易懂]

    tomcat日志详解[通俗易懂]文章目录tomcat日志配置tomcat日志文件详解catalina.outcatalina.YYYY-MM-DD.loglocalhost.YYYY-MM-DD.loglocalhost_access_log.YYYY-MM-DD.txthost-manager.YYYY-MM-DD.logmanager.YYYY-MM-DD.log访问日志详细配置tomcat日志文件切割tomcat日志配…

    2022年6月20日
  • arm程序如何调试_arm开发板用什么语言

    arm程序如何调试_arm开发板用什么语言origin:http://blog.sina.com.cn/s/blog_70bb32080100lx1u.html又是一个多月没有动这个Blog嘿嘿,我发现一个有趣的现象,我的Blog在每年的1月底到2月中旬,7月、8月是淡季,每天访问量基本都在100以下,其它时间都是旺季,尤其9月和3月,每天可以到200以上,最高甚至500。我想因该是因为学生们是EE小站访问的主力吧——9月和3月是开

    2022年10月14日
  • 4g网络设置dns地址_4G网速越来越慢,通过这三个简单的操作,网速成倍提升[通俗易懂]

    随着互联网的进步,从零几年开始移动手机在全国开始普及起来,网速也像火箭一样快速飙升,从2G发展到了现在的5G。不过,有很多网友表示,刚从2G或者3G升级到4G时,网速体验非常好,但近两年来的4G网速越来越慢,还卡顿,甚至感觉还不如以前的3g网络。那么今天,小编就为大家介绍调整手机上网慢和卡顿的三个方法,助你快速提升4G网速!方法一:打电话给运营商客服来刷新上网数据小编为大家介绍的第一个方法是近期最…

    2022年4月15日
  • 图像形态学操作—腐蚀扩展深度

    图像形态学操作—腐蚀扩展深度

    2022年1月14日
  • 奶妈教程之基于ADS的带通滤波器仿真「建议收藏」

    奶妈教程之基于ADS的带通滤波器仿真「建议收藏」基于ADS的带通滤波器教学1.试验参数 版本:ADS2021 带通频率范围:3.3GHz~3.8GHz 带阻频率范围:3.1GHz~4.0GHz 特征阻抗:Z=50Ohm2.试验步骤(1)打开ADS软件并新建工程,如图所示(2)建立原理图工程点击图中红圈所示的图标,建立原理图建立带通滤波器工程然后会进入这样一个界面点击DesignGuide下的Filter点击弹出界面下红圈所示的指令此时整个程序界面如图所示,继续点击红圈所示的符号放入设计界面中然后选择图中红圈窗

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号