第4章 Internet地址

第4章 Internet地址

InetAddress类

java.net.InetAddress类是Java对IP地址(包括IPv4和IPv6)的高层表示。

创建新的InetAddress对象

InetAddress没有公共构造函数。有一些静态工厂方法,可以连接到DNS服务器来解析主机名。InetAddress.getByName()。

InetAddress address = InetAddress.getByName("www.oreilly.com");

InetAddress address = InetAddress.getByName("208.201.239.100");

getAllByName()得到一个主机的所有地址。

getLocalHost()方法会为运行这个代码的主机返回一个InetAddress对象。

getByAddress(byte[] addr)

getByAddress(String hostname,byte[] addr)

缓存

InetAddress类会缓存查找的结果。

得到给定主机的地址,就不会再次查找。

按IP地址查找

优先使用主机名查找,只有当主机名不可用时才使用IP地址

安全性问题

要测试一个主机能否解析,所用的特定SecurityManager方法是checkConnect():

public void checkConnect(String hostname,int port)

当port参数为-1时,检查能否调用DNS解析指定的hostname。

当port参数大于-1,检查是否允许在指定端口对指定主机建立连接。

获取方法

将主机名作为字符串返回,将IP地址返回为字符串和字节数组

public String getHostName()

public String getCanonicalHostName()

public byte[] getAddress()

public String getHostAddress()

地址类型

Java提供了10个方法来测试InetAddress对象是否符合其中某个标准。

isAnyLocalAddress()判断是否是通配地址。通配地址可以匹配本地系统中的任何地址。IPv4中,通配地址是0.0.0.0;IPv6中通配地址是0:0:0:0:0:0:0:1

isLoopbackAddress()判断是否是回送地址。回送地址直接在IP层连接同一台计算机,而不使用任何物理硬件。在IPv4中,回送地址是172.0.0.1;在IPv6中,回送地址是0:0:0:0:0:0:0:1。

isLinkLocalAddress()判断是否是IPv6本地链接地址。IPv6本地链接地址可以用于帮助IPv6网络实现自配置。所有本地链接地址都以8字节FE80:0000.0000:0000开头。

isSiteLocalAddress()判断是否是一个IPv6本地网络地址。本地网络地址以8字节FEC0:0000.0000:0000开头。

isMulticastAddress()判断是否是一个组播地址。组播地址会将内容广播给所有预定的计算机,而不是某一台计算机。

isMCGlobla()

isMCOrgLocal()

isMCSiteLocal()

isMCLinkLocal()

isMCNodeLocal()

测试可达性

InetAddress类有两个isReachable()方法,可以测试一个特定节点对当前主机是否可达。

public boolean isReachable(int timeout) throws IOException

public boolean isReachable(NetworkInterface interface,int ttl,int timeout) throws IOException

Object方法

Inet4Address和Inet6Address

来区分IPv4地址和IPv6地址

NetworkInterface类

NetworkInterface类表示一个本地IP地址。

工厂方法

由于NetworkInterface对象表示物理硬件和虚拟地址,用一些静态工厂方法可以返回与某个网络接口关联的NetworkInterface对象。可以通过IP地址、名字或枚举来请求一个NetworkInterface.

public static NetworkInterface getByName(String name) throws SocketException

... getByInetAddress(InetAddress address)...

... getNetworkInterfaces() ... 返回本地主机上的所有网络接口

获取方法

有了NetworkInterface对象,就可以查询其IP地址和名字。

public Enumeration getInetAddresses()

public String getName()

public String getDisplayName()

一些有用的程序

你可能感兴趣的:(第4章 Internet地址)