android 自定义dns解析器,Android中DNS解析

本文探讨了在Android中如何处理DNS缓存问题,尤其是当服务器IP变化时,如何确保客户端正确访问。文章介绍了DNS的工作原理,Android系统的DNS缓存机制,包括虚拟机层和框架层的缓存,并提供了控制DNS缓存时间的方法。同时,提出了两种应对服务器IP变化的解决方案:在Application的onCreate()中禁用DNS缓存和保存解析后的IP地址以供后续连接使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当服务端IP变化,大量用户还是访问的以前的IP,连接不上服务器。 我们的客户端软件如何通过域名正确访问服务器?这里面主要涉及到DNS缓存的问题。 什么是DNS? DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。简单说,DNS就是 域名(我们平时使用的网址,如www.sina.com.cn等)到 ip 地址的 服务器。 因为计算机访问对方服务器时,只能识别对方服务器的ip地址,所以当我们输入网址时,就需要先到DNS服务器查询对应的IP地址,然后再访问。 DNS缓存 DNS访问是个比较耗时的操作,所以android会把查询到的结果缓存起来,下次查询的时候,就可以直接从缓存中获取,而不需要DNS查询。 DNS解析缓存分为两种:查询成功的缓存,查询失败的缓存(如查询域名不存在等) 。 android 系统对DNS缓存 有两个地方,一个是虚拟机层 , 一个是 框架层 java.net.InetAddress 类内部维护了一个缓存。 当通过域名解析IP地址时,通过 java.net.InetAddress类来调用相应的方法。它会先查看自身缓存里有没有,木有的话会看虚拟机层有木有缓存,还木有的话才会到DNS服务器查询。 控制DNS缓存 有些情况下,我们不能使用DNS缓存,如服务器IP地址变化等。 虚拟机层默认使用的缓存策略是 成功的查询永久缓存(这里的永久缓存是指整个虚拟机生命周期,虚拟机重启,缓存就没有了) , 失败的查询只缓存10s。 我们可以设置虚拟机的DNS缓存时间TTL (time-to-live 生命周期): java代码

Sec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值