2.1 套接字地址
来源:互联网 发布:京东精选 知乎 编辑:程序博客网 时间:2024/06/15 00:09
InetAddress类代表一个网络目标地址,包括主机名和数字类型的地址信息。
该类有两个子类Inet4Address和Inet6Address分别代表IPV4和IPV6。
InetAddress实例不可变。
IP地址实际上是分配给了主机和网络之间的连接,而不是主机本身。
NetworkInterface类提供了访问本机所有接口信息的功能,这个功能非常有用,比如当一个程序需要通知其他程序其IP地址时就会用到。
实例程序-获取本机地址(三个命令行参数:www.mkp.com blah.blah 129.35.69.7)
public class InetAddressExample {public static void main(String[] args) { try {// 获取主机的网络接口列表 Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces(); if(interfaceList==null){ System.out.println("没有找到任何网络接口"); }else{ while(interfaceList.hasMoreElements()){ NetworkInterface iface = interfaceList.nextElement();// 打印网络接口名,通常由字母和数字组成,代表接口类型和具体实例 System.out.println("NetworkInterface:"+iface.getName()+":"); Enumeration<InetAddress> addressList = iface.getInetAddresses(); if(!addressList.hasMoreElements()){ System.out.println("\tNo address for this interface"); continue; }// 打印每个网络接口的地址 while (addressList.hasMoreElements()) { InetAddress inetAddress = (InetAddress) addressList.nextElement(); System.out.println("\taddress"+ (inetAddress instanceof Inet4Address?"(V4):": (inetAddress instanceof Inet6Address?"(v6):":"(?):"))+ inetAddress.getHostAddress()); } } } } catch (SocketException e) { System.out.println("Error getting network interfaces:"+e.getMessage()); }// 获取命令行输入的每个参数所对应的主机名和地址 for(String host:args){ try { System.out.println(host+":");// 获取给定主机名/地址的相关地址列表 InetAddress[] addressList = InetAddress.getAllByName(host); for(InetAddress address:addressList){// 打印主机名和数字型地址 System.out.println("\t"+address.getHostName()+"\t"+address.getHostAddress()); } } catch (UnknownHostException e) { System.out.println("\tUnable to find address for "+host); } } }}
当使用假地址“blah.blah”时,系统会尝试各种不同的方法将主机名解析成IP地址,会耗费大量时间。因此最好能使用点分形式的IP地址来访问一个主机。
如果远程主机由名字指定,那么运行实例程序的主机必须配置为能够将名字解析成地址。如果能够通过主机名字ping到该主机(在命令行窗口执行“ping server.example.com”),那么实例程序中就可以使用主机名。InetAddress: 创建和访问
static InetAddress[] getAllByName(String host) // 返回与主机名对应的所有地址;static InetAddress getByName(String host) // 通过主机名获取地址static InetAddress getLocalHost() // 获取本地主机的地址byte[] getAddress() // 获取IP地址的二进制形式
InetAddress: 字符串表示
String toString() // 返回“主机名/数字型IP地址” String getHostAddress() // 返回“数字型IP地址” String getHostName() // 返回“主机名”,解析失败时返回数字型IP String getCanonicalHostName() // 返回“主机域名全称”,如果同一地址对应多个名称,该方法返回的主机名可能与最初创建实例的主机名不同。解析失败时返回数字型IP
InetAddress:检测属性
boolean isAnyLocalAddress() //任意本地地址boolean is LinkLocalAddress() //本地链接地址boolean isLoopbackAddress() //回环地址boolean isMulticastAddress() //广播地址boolean isMCGlobal() //全球范围的广播地址boolean isMCLinkLocal() //子网广播地址boolean isMCNodeLocal() //本地接口地址boolean isMCOrgLocal() //组织范围的广播地址boolean isMCSiteLocal() //站点范围的广播地址//是否能与InetAddress地址确定的主机进行数据报文交换。boolean isReachable(int timeout) boolean isReachable(NetworkInterface netif, int ttl, int timeout)
NetworkInterface:创建、获取信息
static Enumeration<NetworkInterface> getNetworkInterfaces();static NetworkInterface getByteInetAddress(InetAddress addr);static NetworkInterface getByName(String name);Enumeration<InetAddress> getInetAddresses();String getName();String getDisplayName();
第一个方法非常有用,可以获取当前主机的网络接口列表,再使用列表中的子项实例getInetAddresses()获得每个网络接口的所有地址。但是并不是所有地址都能通过互联网访问,并且地址时乱序的,并不是第一个接口的第一个地址能够通过互联网访问。而要通过InetAddress的属性检查方法判断。
getName()返回接口名,在很多系统中回环地址都是lo0
- 2.1 套接字地址
- 套接字地址处理
- 套接字地址结构
- 套接字地址结构
- 套接字地址结构
- 套接字地址结构
- linux套接字地址
- 套接字地址
- 套接字地址结构
- 套接字地址结构
- 基本套接字:套接字地址
- 18.3.3 套接字地址
- Unix套接字地址结构
- 套接字的地址结构
- IPV4套接字地址结构
- Unix套接字地址结构
- IPv4套接字地址结构
- 套接字和套接字地址结构定义
- The opatch minimum version check for patch failed
- 自定义可适应ScrollView的ListView
- 关于重温《C和指针》这本书
- 头文件多次包含编译出错
- Vue开发实战
- 2.1 套接字地址
- Android关于线程优化以及性能优化的一些建议
- BZOJ3922 Karin的弹幕
- bmp格式解析
- android 使用xutils 上传 数组
- 轻松学习之 IMP指针的作用
- 2016多校联合训练10&&HDU5857 Median
- 十七道海量数据处理面试题与Bit-map详解
- bzoj1008(简单计数问题+快速幂)