【发布时间】:2010-01-15 06:54:58
【问题描述】:
有没有什么方法可以使用 Java 检测网络中断或网络较弱?
【问题讨论】:
标签: java networking
有没有什么方法可以使用 Java 检测网络中断或网络较弱?
【问题讨论】:
标签: java networking
您可以间歇性地测试与 google 等已知主机的 http 连接并检测 ConnectionExceptions
URLConnection con = new URL("http://www.google.com/").openConnection();
con.setUseCaches(false);
con.setAllowUserInteraction(false);
while(true)
{
try
{
con.connect();
con.getContentType(); // just to make sure the connection works
// sleep for some interval
}
catch(IOException e)
{
// handle and break
}
}
【讨论】:
一般来说,在 Java 或任何其他语言中不可能 100% 准确地检测和诊断网络“中断”。事实上,甚至不清楚什么是“破损”。这就是为什么(例如)当您在 URL 中输入虚假 DNS 名称或 IP 地址时,您最喜欢的 Web 浏览器会给您一个模糊的错误消息。
问题是在很多情况下无法知道网络交互失败的原因:
其中许多情况很难诊断。并且尝试从 Java 中进行诊断更加困难,因为 Java 不提供标准 API 来执行诸如发送 ICMP 数据包之类的事情。基本上,您只能尝试解释尝试连接套接字失败时返回的 Java 异常。
IMO,您最好的办法是利用现有的命令行工具,例如“ping”和“traceroute”,并学习阅读茶叶。或者,如果这太难了,请将网络诊断留给专家。
【讨论】: