InetAddress/InetSocketAddress类
InetAddress类
表示为互联网协议地址.InetAddress类具有一个缓存,用于存储成功或者不成功的主机名解析.可以通过系统属性"networkaddress.cache.ttl"(time-to-live)来设定.InetAddress有2个子类:Inet4Address和Inet6Address,大部分时候我们无需关注获得InetAddress是何种类型.可以使用instanceof来判断获取的IP地址是何种类型.
InetAddress类中有个内置的Cache内部类,用来缓存"IP信息"(基于Map实现)
String getHostName():获取此IP地址的主机名,如果此InetAddress是用主机名创建的,将返回主机名.否则将执行反向名称查找并给予系统配置的名称查找服务返回结果.如果有安全管理器且查找不被允许则返回IP地址的文本形式.
String getCanonicalHostName():获取IP地址的完整限定域名(包括主机所在域信息 + 主机名).如果有安全管理器且查找不被允许则返回IP地址的文本形式
InetAddress inet = InetAddress.getLocalHost();
System.out.println(inet.getCanonicalHostName());//BJXX-LIUGUANQ.360.local
System.out.println(inet.getHostName());//BJXX-LIUGUANQ
String getHostAddress():获取IP地址的文本形式//10.12.124.57
static InetAddress getByName(String host):根据主机名,获取inetAddress.
InetAddress.getByName("BJXX-YANGKUN").getHostName();//10.12.144.92
static InetAddress getLocalHost():获取本机IP地址.
boolean isMulticastAddress():检测当前地址是否为多播地址,多播地址用于"UDP发送多播数据时"使用,多播地址有严格的协议要求,IPV4多播地址为"224.0.0.0"~"239.255.255.255",IPV6的多播地址为任意FF开头的地址.参见MulticastSocket.
boolean isAnyLocalAddress():是否为任意本地地址,在Socket编程中,如果尚未制定特定地址,那么此时地址将会被置为0.检测是如果发现地址的值为0,此方法返回true.
boolean isLookbackAddress():是否为回送地址,IPV4中以"127"开头的地址均为回送地址(即127.0.0.1),IPV6的回送地址为"0:0:0:0:0:0:0:1"(即,::1).
boolean isLinkLocalAddress():是否为本地连接地址(link-local).IPV4中为169.254.0.1 ~ 169. 254.254.255.IPV6为FE80::/16;link-local地址是一种互联网保护协议地址,只能被用于本地局域网内的通信,link-local的数据包将不会被路由器转发.本地链接地址将有操作系统管理配置(或自动装配),提供了一种在本地局域网中实现P2P通讯的手段.(无线鼠标??)
boolean isSiteLocalAddress() :是否为"站点本地"地址.IPV4中以"172.16"或者"192.168"开头,是封闭局域网IP,不能直接和开放互联网通信(需要地址转换技术,路由器?).具有开放互联网通信的所有基础..
InetSocketAddress类
为Socket链接而设计,为InetAddress + port.
InetSocketAddress(InetAddress,int port)
InetSoketAddress(String hostname,int port)