InetAddress类

InetAddress类是Java对IP地址(包括IPv4和IPv6)的高层表示。大多数其他网络类都要用到这个类,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket等。一般来讲,它包括一个主机名和一个IP地址。

创建InetAddress对象

通过主机名创建
package com.dy.xidian;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Create {
    
    public static void main(String[] args){
        try {
            //查询我的网站IP
            InetAddress address = InetAddress.getByName("www.xdysite.cn");
            System.out.println("my site:"+address.getHostAddress());
            //查询百度的所有IP
            InetAddress[] baidu = InetAddress.getAllByName("www.baidu.com");
            System.out.println("baidu:");
            for(InetAddress addr : baidu)
                System.out.println("\t"+addr.getHostAddress());
            //查询本机IP
            //如果主机名存在且是一个FQDN的话,那么会得到真实的IP地址,否则会得到127.0.0.1
            InetAddress local = InetAddress.getLocalHost();
            System.out.println("local:"+local.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

传入的参数为主机名,在构建InetAddress对象时,会去DNS服务器中获取对应的地址,如果在DNS中查找不到对应的IP地址,前两个会抛异常(UnknownHostException),getLocalHost()则会返回localhost和127.0.0.1。

通过IP创建
InetAddress address = InetAddress.getByName("202.117.119.1");
System.out.println(address.getHostName());

传入的是IP地址,则在构建InetAddress时不会去检查DNS。只有当显示的调用了getHostName(),才会完成主机名的DNS查找。

可达性测试

InetAddress类有两个isReachable(),来测试目标地址是否可达。

try{
      InetAddress address = InetAddress.getByName("www.xdysite.cn");
      if(address.isReachable(2000))
           System.out.println("可以连接到该主机");
      else
           System.out.println("无法连接");
      }catch(Exception e){
            e.printStackTrace();
}

该方法会使用ICMP echo请求来查看指定地址是否可达。isReachable()的参数是超时时间timeout,单位为毫秒。如果在timeout之内有响应,则返回true,否则返回false。

equals方法

InetAddress类重写了equals方法。如果一个对象本身是InetAddress类的实例,而且与一个InetAddress对象有相同的IP地址,则这两个对象通过equals方法进行判断是相等的。

public static void main(String[] args){
        try{
            InetAddress address1 = InetAddress.getByName("www.xdysite.cn");
            InetAddress address2 = InetAddress.getByName("test.xdysite.cn");
            if(address1.equals(address2))
                System.out.println("相同");
            else
                System.out.println("不同");
        }catch(Exception e){
            e.printStackTrace();
        }
    }

www.xdysite.cn与test.xdysite.cn指向同一台主机,所以上面的代码运行后会输出相同。

转载于:https://www.cnblogs.com/xidongyu/p/6096858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值