比ping的响应更快。
我用的kotlin
object NetUtil {
/**
* 检查互联网地址是否可以访问-使用DNS解析
* @param hostname 要检查的域名或IP
* @param callback 检查结果回调(是否可以解析成功){@see java.lang.Comparable<T>}
</T> */
fun isNetWorkAvailableOfDNS(hostname: String, callback: Comparable<Boolean>?) {
val handler = Handler(Handler.Callback { msg ->
callback?.compareTo(msg.arg1 == 0)
false
})
Thread {
val msg = Message()
try {
val parse = DNSParse(hostname)
val thread = Thread(parse)
thread.start()
thread.join((1 * 1000).toLong()) // 设置等待DNS解析线程响应时间为1秒
val resCode = parse.get() // 获取解析到的IP地址
msg.arg1 = if (resCode == null) -1 else 0
} catch (e: Exception) {
msg.arg1 = -1
e.printStackTrace()
} finally {
handler.sendMessage(msg)
}
}.start()
}
/**
* DNS解析线程
*/
private class DNSParse(private val hostname: String) : Runnable {
private var address: InetAddress? = null
override fun run() {
try {
set(InetAddress.getByName(hostname))
} catch (e: Exception) {
e.printStackTrace()
}
}
@Synchronized
fun set(address: InetAddress) {
this.address = address
}
@Synchronized
fun get(): InetAddress? {
return address
}
}
}