проблема при попытке убедиться, что сервер доступен (HostReachable) - PullRequest
0 голосов
/ 17 июля 2011


Я хочу проверить, доступен ли сервер.Нашел пример здесь, чтобы получить 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-й, если сервер вообще доступен, и второй - если он отвечает.
Как это сделать?

1 Ответ

0 голосов
/ 17 июля 2011

Я хочу проверить, доступен ли сервер.

Затем сделайте реальный запрос.Например, запросите robots.txt с веб-сервера, если вы пытаетесь установить связь с этим веб-сервером.Ничто другое не будет надежным - ваша техника, даже если бы она работала, не сработала бы, например, при сбое демона веб-сервера.

...