Java网络编程从入门到精通(4):DNS缓存(二)

2014-11-23 23:56:57 · 作者: · 浏览: 1
时192.168.18.20已经被删除。因此可以判断,addresses2是从DNS缓存中得到的数据。如果运行如下的命令,并在5秒后按任意键继续后,addresses2就会只剩下一个IP地址(192.168.18.10)。


java mynet.MyDNS ComputerName 5

如果域名在DNS服务器上不存在,那么客户端在进行一段时间的尝试后(平均为5秒),就会抛出一个UnknownHostException异常。为了让下一次访问这个域名时不再等待,DNS缓存将这个错误信息也保存了起来。也就是说,只有第一次访问错误域名时才进行5称左右的尝试,以后再访问这个域名时将直接抛出UnknownHostException异常,而无需再等待5秒钟,

访问域名失败的原因可能是这个域名真的不存在,也可能是因为DNS服务器或是其他的硬件或软件的临时故障,因此,一般不能将这个域名错误信息一直保留。在Java中可以通过networkaddress.cache.negative.ttl属性设置保留这些信息的时间。这个属性的默认值是10秒。它也可以通过java.security.Security.setProperty方法或java.security文件来设置。下面的代码演示了networkaddress.cache.negative.ttl属性的用法:


package mynet;

import java.net.*;

public class MyDNS1
{
public static void main(String[] args) throws Exception
{
java.security.Security.setProperty("networkaddress.cache.negative.ttl",
"5");
long time = 0;
try
{
time = System.currentTimeMillis();
InetAddress.getByName("www.ppp123.com");
}
catch (Exception e)
{
&nbs