В моем приложении у меня есть классы AsyncTask, который подключается к локальному/удаленному серверу, чтобы получить некоторые данные, я хочу, чтобы проверить соединение с сервером перед запуском AsyncTask, У меня есть эта функция:Как проверить, существует ли соединение с сервером?
public static boolean checkServerAvailable(String hostURL) {
HttpURLConnection connection = null;
try {
URL u = new URL(hostURL);
connection = (HttpURLConnection) u.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("HEAD");
int code = connection.getResponseCode();
System.out.println("" + code);
return true;
// You can determine on HTTP return code received. 200 is success.
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
Эта функция использует таймаут для подключения к серверу, а если истекает время ожидания, это означает, что нет сервера. Проблема в том, что я запускаю этот код, и он возвращает «нет сервера», даже если сервер существует.
Я попытался установить большой тайм-аут, например 5000 мс, но он очень долго останавливает пользовательский интерфейс и иногда все еще возвращает «нет сервера», даже когда сервер существует.
Что мне делать? Спасибо!
Возможно, возникла проблема с подключением к Интернету. – AKSiddique
Какой из этих трех блоков блокировки он вводит, и какое исключение оно выбрасывает? – EJP
'он возвращается ', нет сервера' '. Невозможно. Эта функция возвращает true или false. – greenapps