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()); } }
欢迎访问:wenhao.ink