EHOSTUNREACH (нет маршрута к хосту) на Android HTTP

Я пытаюсь подключиться к серверу в той же сети, что и мой Android-телефон через HTTP. Мой код выглядит следующим образом:

DefaultHttpClient client = new DefaultHttpClient();
String url = "http://192.168.137.1:80";
url += "/ebs/auth.php?username=" + username + "&password=" + password;

HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
HttpEntity respEntity = response.getEntity();

InputStream is = respEntity.getContent();
String content = GeneralUtility.fromStream(is);

return content;

где возвращаемое содержимое String должно быть строкой JSON для анализа. В течение одного золотого момента мне удалось получить доступ к серверу, но для всех других попыток я либо столкнулся с TimeoutExceptions (я установил тайм-аут 60 секунд), либо более неприятную ошибку:

org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.137.1 refused

Это вызвано:

java.net.ConnectException: failed to connect to /192.168.137.1 (port 80): connect failed: EHOSTUNREACH (No route to host)

И это в свою очередь вызвано:

libcore.io.ErrnoException: connect failed: EHOSTUNREACH (No route to host)

Я застрял здесь, так как не могу выполнить базовую аутентификацию для своего приложения. Что я делаю неправильно?

Ответ 1

Убедитесь, что ваш сервер действительно работает!

Я столкнулся с одной и той же проблемой, получая то же Исключения, когда приложение Android отправляло запросы на компьютер в локальной сети. Как оказалось, служба webapi была недоступна, потому что компьютер (то есть "сервер" ) был выключен.

Также найдите журнал "TIMEDOUT". Это еще одно указание на то, что ваши настройки в порядке, и это сервер, который не отвечает.

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

Ответ 2

В моем случае я тестировал смартфон с настройкой прокси. Я решил проблему отключения прокси-сервера в конфигурации телефона. Если кто-то застрял в этой ошибке, моя рекомендация состоит в том, чтобы подтвердить, что сеть эмулятора/физического устройства правильно настроена.