Я хочу проверить, доступен ли сервер.Нашел пример здесь, чтобы получить IP-адрес сервера в виде целочисленного значения.Я пытаюсь проверить это следующим образом (в действии):
boolean s = isHostReachable(getString(R.string.server_address));
но не повезло, он возвращает false, в то время как
final int serverIP = getHostIPAsInt(getString(R.string.server_address));
всегда возвращает значение.Вот методы:
public static boolean isHostReachable(final String hostName){
try {
return InetAddress.getByName(hostName).isReachable(255);
} catch (UnknownHostException e) {
return false;
} catch (IOException e){
return false;
}
}
public static int getHostIPAsInt(final String hostname) {
final InetAddress inetAddress = getHostIP(hostname);
if (inetAddress==null)
return 0;
final byte[] addrBytes = inetAddress.getAddress();
final int addr = (addrBytes[3]&0xff) << 24
| (addrBytes[2]&0xff) << 16
| (addrBytes[1]&0xff) << 8
| addrBytes[0]&0xff;
return addr;
также я попробовал следующее с тем же результатом:
isInternetWiFi = cm.requestRouteToHost(ConnectivityManager.TYPE_WIFI, serverIP);
isInternetMobile = cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE, serverIP);
оба являются ложными, даже если я использую "google.com".У меня возникло ощущение, что serverIP имеет отрицательное значение, оно всегда дает сбой ... Но InetAddress не использует serverIP и по-прежнему возвращает false.
пробует его с помощью эмулятора (aos 2.2).
Мне нужно убедиться, что сервердолжен продолжить выполнение приложения из-за того, что его функциональность зависит от сервера (клиент-серверное приложение).Но идея состояла в том, чтобы проверить, использует ли устройство (подключено через) Wi-Fi, который не имеет реального доступа к Интернету, как в каком-то локальном WiFi.Поэтому я должен проверить 1-й, если сервер вообще доступен, и второй - если он отвечает.
Как это сделать?