public boolean isReachable(String ipAddress, int port, int timeout)
{
Socket socket = new Socket();
Exception exception = null;
try {
socket.connect(new InetSocketAddress(ipAddress, port), timeout);
}
catch (IOException e) { exception = e; }
finally {
try { socket.close(); } catch (Exception e) {e.printStackTrace(); }
}
return exception == null;
}
当我连接到互联网时,此代码有效。但是当我从ISP端断开连接时它也有效。(例如,当adsl服务日期过期或流量完成时)。 请告诉我问题出在哪里?
答案 0 :(得分:1)
流量阻止策略因ISP而异。检查网站是否真正可用的唯一确定方法是尝试获取实际的响应流并进行分析。
HTTP服务器的显而易见的方法是,使用URLConnection,发送GET /请求,检查响应代码是否为200 OK。但是没有通用的方法来检查任何类型的服务器 - 你需要知道通常的响应是什么样的。
答案 1 :(得分:0)
你应该选择具有isReachable()方法的InetAddress,文档应该是:
public boolean isReachable(int timeout) 抛出IOException
测试该地址是否可达。最好的努力是通过实现来尝试到达主机,但防火墙和服务器 配置可能会阻止导致无法访问状态的请求 虽然某些特定端口可以访问。典型的实现 如果可以获得特权,将使用ICMP ECHO REQUEST, 否则它将尝试在端口7(Echo)上建立TCP连接 目的地主机。