InetAddress类是Java包装用来表示IP地址的高级表示。几乎所有的Java网络相关的类都和它有关系,例如:serversocket,socket,URL,DataGramSocket,DataGRamPacket等。
下面就InetAddress所提供的一些类做一个简单的介绍。
1.InetAddress.getByName()
通过主机名获取对应的ip地址:(当然也支持通过IP地址来查找主机名)
该方法会建立与本地DNS的一个连接,来获取名称和地址之间的映射关系。(如果本地DNS缓存了地址,就不再获取连接。)
2**.InetAddress.getLocalHost()**
得到真正的主机名和IP地址。如果获取失败,则会返回一个会送地址,即主机名为“localhost”,以及一个点四分段的ip:‘127.0.0.1’ 。

3**缓存**
由于DNS查找的开销很大,并且如果一个地址不可达,可能会需要几秒钟的时间来确认。InetAddress提供了缓存机制,一旦得到一个给定主机的地址,就会缓存起来,即使重新定义一个InetAddress类,也不会重新再获取一次,而是直接从缓存中获取。但是需要注意一种情况。就是DNS在传输过程中可能的超时。当第一次请求是发生超时失败,而第二次的时候请求已经到达,并缓存了起来。所有Java在缓存不可达的地址时,只缓存了10s。
4.安全性问题
从主机名创建一个InetAddress对象,被认为是一种不安全的操作。因为这需要一个DNS查找,在默认的安全管理控制器下的不可行applet只允许获取它本机的主机地址以及ip。不允许不可行代码由任何其他主机名创建InetAddress对象。不可信的代码不允许对第三方主机完成任意查找。
5.获取方法

public String getHostName()
publlic String getCanonicalHostName()
public byte[] getAddress()
public String getHostAddress()


没有对应的setHostName()以及getHostName()。代表着无法通过反射来改变其内部的。因此是线程安全的。
6.地址类型
ip地址分为不同的类型,例如:‘’127.0.0.1‘’属于本地回送地址。Java提供了10中方法来判断一个ip地址属于那种不同的分段。
public boolean isAnyLocalAddress()