快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
中的元素是一样的,并且创建addresses2数组所花费的时间一般为0毫秒(小于1毫秒后,Java无法获得更精确的时间)。

测试1:

执行如下命令(将DNS缓存超时设为5秒):

java mynet.MyDNS www.126.com 5

运行结果1(在5秒之内按任意键):

addresses1:   344毫秒 www.126.com/202.108.9.77 按任意键继续 addresses2:  0毫秒 www.126.com/202.108.9.77

运行结果2(在5秒后按任意键):

addresses1:   344毫秒 www.126.com/202.108.9.77 按任意键继续 addresses2:  484毫秒 www.126.com/202.108.9.77

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

时间:2011-01-12

在上面的测试中可能出现两个运行结果。如果在出现“按任意键继续…”后,在5秒之内按任意键继续后,就会得到运行结果1,从这个结果可以看出,addresses2所用的时间为0毫秒,也就是说,addresses2并未真正访问DNS服务器,而是直接从内存中的DNS缓存得到的数据。当在5秒后按任意键继续后,就会得到运行结果2,这时,内存中的DNS缓存中的数据已经释放,所以addresses2还得再访问DNS服务器,因此,addresses2的时间是484毫秒(addresses1和addresses2后面的毫秒数可能在不同的环境下的值不一样,但一般情况下,运行结果1的addresses2的值为0或是一个接近0的数,如5。运行结果2的addresses2的值一般会和addresses1的值很接近,或是一个远比0大的数,如1200)。

测试2:

执行如下命令(ComputerName为本机的计算机名,DNS缓存超时设为永不过期[-1]):

java mynet.MyDNS ComputerName -1

运行结果(按任意键继续之前,将192.168.18.20删除):

addresses1:   31毫秒 myuniverse/192.168.18.10 myuniverse/192.168.18.20 按任意键继续 addresses2:   0毫秒 myuniverse/192.168.18.10 myuniverse/192.168.18.20

从上面的测试可以看出,将DNS缓存设为永不过期后,无论过多少时间,按任意键后,addresses2任然得到了两个IP地址(192.168.18.10和192.168.18.20),而且addresses2的时间是0毫秒,但在这时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.curren

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号