#java
Сейчас использую метод public Boolean getInternetStatus() { Boolean inetStatus; try { URL url = new URL(urlStr); URLConnection con = url.openConnection(); con.setConnectTimeout(2000); con.setReadTimeout(2000); con.connect(); inetStatus = true; } catch (Exception e) { inetStatus = false; log.error("getInternetStatus", e); } return inetStatus; } Вроде бы работает, но проблема в том что таймаут не срабатывает. Если сайт, к которому идет обращение, висит, то коннект обрывается только через дефолтные 20 секунд. Получается что приложение зависает на 20 сек. Подскажите, как правильно установить таймаут? Возможно есть какой-то другой способ проверки подключения, чтобы обойти проблему таймаута?
Ответы
Ответ 1
Проверить наличие соединения с интернетом - просто протестировать загружается ли какой-либо сайт или нет (можно какой-нибудь сервис WhoIs или Google) В любом случае для проверки лучше всего использовать крупные сайты, например http://ru.stackoverflow.com или google.com. Либо проверять последовательно доступность нескольких сайтов - если хоть один из них доступен - значит соединение с интернетом присутствует. Способ 1: private static boolean checkInternetConnection() { Boolean result = false; HttpURLConnection con = null; try { con = (HttpURLConnection) new URL("http://ru.stackoverflow.com/").openConnection(); con.setRequestMethod("HEAD"); result = (con.getResponseCode() == HttpURLConnection.HTTP_OK); } catch (Exception e) { e.printStackTrace(); } finally { if (con != null) { try { con.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } return result; } Способ 2: (метод isReachable(), должен проверять хост в интернете на доступность) public class Inet2 { public static void main(String[] args) throws Exception { InetAddress in = InetAddress.getByName("http://ru.stackoverflow.com/"); System.out.println(in.isReachable(1000) ? "Host is reachable" : "Host is NOT reachable"); } } Способ 3: (способ заточенный под Windows. Основан на использовании ping) public class Inet3 { public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec("ping -n 1 " + host); boolean reachable = (proc.waitFor()==0); System.out.println(reachable ? "Host is reachable" : "Host is NOT reachable"); } } а вообще... ЗАЧЕМ ТАКАЯ ПРОВЕРКА ВООБЩЕ НУЖНА? Вам нужен ответ от какого-то ресурса (ведь вы хотите куда-то обратиться) - попытайтесь обратиться сразу, без проверок доступности интернета. Если в ходе подключения появится ошибка - обработайте ее через try, выведите сообщение: "Пардон, пацаны, интернет не подключен!"
Комментариев нет:
Отправить комментарий