赞
踩
在Java中InetAddress和InetSocketAddress看起来很相似,用来描述IP地址和主机名称。当然,它们也支持使用常规方法来检查地址:回环地址、本地地址、组播地址;基本的返回方法:获得IP,获得主机名称等。
重要的是InetSocketAddress包含InetAddress。这意味着,如果我们想对InetSocketAddress中的InetAddress做任何操作,只需要通过getInetAddress()方法获得即可。
属性 | InetAddress | InetSocketAddress |
---|---|---|
描述对象 | IP地址 | Socket地址(IP地址+端口) |
描述 | IP和主机对象名称 | IP和主机的对象名称,并包括端口号 |
解决问题 | IP到主机名称,主机名称到IP | IP到主机名称,主机名称到IP,可以包含端口 |
获取对象 | InetAddress.getLocalhost(); InetAddress.getByName(String); InetAddress.getByAddress(String); | InetSocketAddress.createUnresolved(String, port); |
IP地址分为IPv4 和IPv6。
4字节长的ip称为IPv4.目前大部分ip都是IPv4。 IPv4地址一般写为四哥无符号的字节,每个字节范围从0到255,最高字节在前面。为方便人们查看,各字节用点号分割。 例如:192.168.1.100.这称为点分四段格式。
16字节长的ip成为IPv6. IPv6地址通常些微冒号分割的8个区块,每个区块4个十六进制数字。 例如:2400:cb00:2048:1:0:0:6ca2:c665
两个冒号标识多个0区块,但每个地址中双冒号之多出现一次。 例如:2001:1234:4567:0000:0000:0000:8888可以缩写为 2001:1234:4567::8888。
IPv6和IPv4的混合网络中,IPv6地址的最后4字节有时些微IPv4的点分四段地址。 例如:2001:1234:4567::c0a8:0a64可以写为 2001:1234:4567::192.168.10.100
ip地址对于计算机来说很不错,但位于人来说是个问题,于是就发明了域名系统(Domain Name System, DNS)。DNS将人们可以记忆的主机名与计算机可以记忆的IP地址关联在一起。服务器至少有一个主机名。客户端往往有一个主机名,但也可能没有,特别是有些客户端的IP地址会在启动的时候动态指定。
IP地址和域名可以1:1、 1:多 、 多:1 、 多:多。 可以通过一个域名对应多个ip,来实现DNS的负载均衡。
java.net.IntAddress类是java对IP地址的高层表示。大多数其它网络类都要用到这个类,包括Socket、ServerSocket、URL、DatagramSocket、DatagramPacket等。它包括一个主机名和一个IP地址。
[HostName : www.baidu.com] [HostAddress: 220.181.112.244]
[HostName : 220.181.112.244] [HostAddress: 220.181.112.244] 如果获取不到主机名就返回ip
[HostName : IFC-PCB-094] [HostAddress: 192.168.3.249]
[HostName : IFC-PCB-094] [HostAddress: 192.168.3.249]
[HostName : jijs] [HostAddress: 192.168.0.1]
[HostName : jijs] [HostAddress: 192.168.0.1]
InetAddress[] addr = InetAddress.getAllByName("www.baidu.com"); for (InetAddress inetAddress : addr) { System.out.println(inetAddress); }
输出: www.baidu.com/220.181.112.244 www.baidu.com/220.181.111.188
//获取主机名 public String getHostName(); //获取主机名(每次方法都解析DNS去获取主机名,而不从缓存中获取) public String getCanonicalHostName(); //获取以字节数组形式的ip地址。 public byte[] getAddress(); //获取点分四段式ip。 public String getHostAddress();
public boolean isMulticastAddress(); public boolean isAnyLocalAddress(); public boolean isLoopbackAddress(); public boolean isLinkLocalAddress(); public boolean isSiteLocalAddress(); public boolean isMCGlobal(); public boolean isMCNodeLocal(); public boolean isMCLinkLocal(); public boolean isMCSiteLocal(); public boolean isMCOrgLocal();
//可以根据指定timeout时间内测试网络是否可达,是否可以建立连接。 public boolean isReachable(int timeout) //可以指定从本机那个网卡、生存时间ttl 和指定时间来测试网络是否可达。 public boolean isReachable(NetworkInterface netif, int ttl, int timeout)
上面调用构造InetAddress,和获取一些信息,其实都是委托给Inet4Address或Inet6Address中的方法。
Paste_Image.png
从代码中可以看出,是根据ip地址字节数组长度来判断创建Inet4Address实例还是Inet6Address实例。
Inet4Address类结构图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。