Отладка Android InetAddress.isReachable

Я пытаюсь понять, как определить, доступен ли конкретный ipaddress в приложении для Android в процессе отладки (я не пробовал это на реальном устройстве).

Из чтения видно, что InetAddress.isReachable должен сделать это для меня.

Первоначально я думал, что могу написать что-то вроде:

InetAddress address = InetAddress.getByAddress (новый байт [] {(байт) 192, (байт) 168, (байт) 254, (байт) 10); success = address.isReachable (3000);

Это возвращает false, хотя я уверен, что это ansible адрес.

Я обнаружил, что если бы я изменил это на 127, 0, 0, 1, он вернул успех.

Моя следующая попытка была в том же коде, но я использовал адрес, который я получил от ping www.google.com (72.167.164.64 на момент написания этой статьи). Нет успеха.

Итак, я попробовал еще один пример:

int timeout = 2000; InetAddress[] addresses = InetAddress.getAllByName("www.google.com"); for (InetAddress address : addresses) { if ( address.isReachable(timeout)) { success = true; // just set a break point here } } 

Я относительно новичок в Java и Android, поэтому я подозреваю, что у меня что-то не хватает, но я не могу найти ничего, что могло бы указать на то, что это такое.

Кажется, что isReachable () никогда не работал хорошо на Android b / c, он пытается использовать ICMP, обычно требуется привилегии root, а затем пытается установить соединение с портом 7, как правило, не работает на современных системах.

вам лучше проверить соединение с установлением соединения TCP с портами, которые, как вы знаете, должны быть открыты.

Спасибо Zed, я также знаю, что адрес, который я пытаюсь получить, вернет html, поэтому я могу сделать больше, чем посмотреть на сокет. Вот что я в итоге сделал, что работает разумно для моей проблемы. Параметр pUrl имеет адрес веб-сайта в нем. Я выбрал 3 секунды для таймаута.

 boolean result = false; try { HttpGet request = new HttpGet(pUrl.toString()); HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, 3000); HttpClient httpClient = new DefaultHttpClient(httpParameters); HttpResponse response = httpClient.execute(request); int status = response.getStatusLine().getStatusCode(); if (status == HttpStatus.SC_OK) { result = true; } } catch (SocketTimeoutException e) { result = false; // this is somewhat expected } 
  • Android: Dex не может анализировать код байта версии 52
  • Как использовать UTF-8 в свойствах ресурсов с помощью ResourceBundle
  • Android N изменяет язык программным путем
  • java.io.FileNotFoundException: этот файл не может быть открыт в качестве дескриптора файла; он, вероятно, сжат
  • Заполните поля в веб-просмотре автоматически
  • Android ListView заголовки
  • android.app.Application нельзя использовать для android.app.Activity
  • Как изменить десятичный разделитель DecimalFormat от запятой до точки / точки?
  • Какой самый простой способ получить текущий день недели в Android?
  • Не удается получить местоположение и электронную почту с помощью API Facebook
  • Почему double width = 50/110000; выход составляет 0,000000000000000?
  • Interesting Posts

    Как поймать исключение JNI / Java

    Что такое стиль без точек в функциональном программировании?

    Не удается загрузить пакет R xlsx на Mac OS 10.11

    Заблокируйте всех ботов / искателей / пауков для специальной директории с htaccess

    Могу ли я заметить разницу между 7200 об / мин и жестким диском емкостью 5400 об / мин?

    Как включить поддержку языка ассемблера в Visual Studio 2013

    Сервер MAMP mysql не запускается. Нет процессов mysql

    Сообщения в Outlook только вычеркнуты и не удалены

    Надежное определение количества элементов в массиве

    Сколько накладных расходов на интеллектуальные указатели по сравнению с обычными указателями на C ++?

    Каково максимальное количество бара, которое теоретически может решить 64-битная машина?

    Принять HTTP-запрос в R-приложении

    Как запустить скрипт в качестве службы Windows XP?

    Изменение продолжительности тайм-аута волейбола

    Ошибка развертывания Heroku H10 (приложение разбилось)

    Давайте будем гением компьютера.