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