zoukankan      html  css  js  c++  java
  • InetAddress的测试

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class InetAddressTestMain {
    
        /*
         * 对于InetAddress的测试
         * 关键词:主机名、主机别名、ip地址、ipv4、ipv6
         * InetAddress是一个不可变对象
         * InetAddress是一个对象,包含3个属性:主机名称、主机别名、主机ip
         * 一个ip对应唯一一个主机名,一个主机名可以对应多个ip(一台计算机上有多个网络地址),一个域名可以对应多个ip(一个web服务有多台机器做负载均衡),一个ip也可以对应多个域名(多个web服务器在同一台机器上)
         * 一般的主机别名就是:网站的域名,为了便于记忆 ,DNS通过主机别名或者主机名都能找到相应的IP
         * 
         * @param args
         * @throws UnknownHostException 
         */
        public static void main(String[] args) throws UnknownHostException {
            System.out.println("对于InetAddress.getByName(host)  InetAddress.getAllByName(host) 的测试");
            //InetAddress.getByName(host)就相当于InetAddress.getAllByName(host)返回的数组取第一个,所以先只说InetAddress.getAllByName(host)
            //InetAddress.getAllByName(host)的参数可以是:域名(别名)、主机名、ip地址(ipv4:192.168.1.235  或者 ipv6)
            
            /*使用域名称来构造InetAddress ,例如:www.google.com
             * 1、构造时就需要连接网络,查询DNS,网络不通则报异常,无法创建成功
             * 2、此时域名显示的是就是域名,主机名显示的是真正的主机名称 。
             * 3、因为一个域名对应多个ip,所以会有多个InetAddress对象
             */
            InetAddress[] googleAddressList=InetAddress.getAllByName("www.google.com");
            for(InetAddress add:googleAddressList)
                System.out.println("ip地址是:"+add.getHostAddress()+" 域名(主机别名)是:"+add.getHostName()+" 主机名是:"+add.getCanonicalHostName());
            
            /*
             * 使用主机名来构造InetAddress ,例如hx-in-f147.1e100.net(google一台服务器的名称)
             * 1、同上面的测试一样:构造时就需要连接网络,查询DNS,网络不通则报异常,无法创建成功
             * 2、此时主机别名和主机名都显示的是hx-in-f147.1e100.net
             * 3、对应着唯一的一个ip地址
             */
            InetAddress[] googleReallyHostAddressList=InetAddress.getAllByName("hx-in-f147.1e100.net");
            for(InetAddress add:googleReallyHostAddressList)
                System.out.println("ip地址是:"+add.getHostAddress()+" 域名(主机别名)是:"+add.getHostName()+" 主机名是:"+add.getCanonicalHostName());
            
          /*
           * 使用ip地址来来构造InetAddress
           * 1、此时构造时不需要联网查询DNS
           * 2、此时的主机名 和 主机别名 均为空:InetAddress的canonicalHostName 和 hostName 均采用延迟加载的方式,当外界调用相应的get方法时,才取查询DNS获得
           * 3、若网络不通,即无法查询DNS,则使用该ip地址作为主机名和主机别名
           */
            InetAddress[] ipAddressList=InetAddress.getAllByName("74.125.71.99");
            for(InetAddress add:ipAddressList)
                System.out.println("ip地址是:"+add.getHostAddress()+" 域名(主机别名)是:"+add.getHostName()+" 主机名是:"+add.getCanonicalHostName());
            
            System.out.println("InetAddress.getByAddress(addr) 的测试;");
            /*
             * 这个同InetAddress.getAllByName() ,使用ip来构造是一样的 。
             */
            InetAddress byteAddress=InetAddress.getByAddress(ipAddressList[0].getAddress());
            System.out.println("ip地址是:"+byteAddress.getHostAddress()+" 域名(主机别名)是:"+byteAddress.getHostName()+" 主机名是:"+byteAddress.getCanonicalHostName());
            /*
             * 使用主机别名和ip来构造一个InetAddress,但是不检查相应的域名是否能解析,ip是否存在能连接。
             * 调用getCanonicalHostName()时候需要联网  。
             */
            InetAddress allInetAddress=InetAddress.getByAddress("hx-in-f147.1e100.net", ipAddressList[0].getAddress());
            System.out.println("ip地址是:"+allInetAddress.getHostAddress()+" 域名(主机别名)是:"+allInetAddress.getHostName()+" 主机名是:"+allInetAddress.getCanonicalHostName());
            
        }
    
    }
  • 相关阅读:
    信息收集之DNS域名解析
    集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示
    简单工厂的霸霸 -- 抽象工厂模式 介绍 使用场景案例 优缺点及程序演示
    可能是目前最易理解的手写promise
    chrome 开发者工具实用技巧
    gulp常用插件之modernizr使用
    koa-cors 跨域设置中间件
    在nodejs 中如何fs文件系统模块
    nodejs操作MongoDB数据库 MongoDB增、删、改、查
    vue动态渲染样式 class
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2708561.html
Copyright © 2011-2022 走看看