ErrnoException: isConnected ошибка: EHOSTUNREACH (нет маршрута к хосту) при изменении сети Wi-Fi с использованием ICS - PullRequest
22 голосов
/ 09 января 2012

При использовании моего приложения на ics, после того, как я переключаю свою сеть Wi-Fi с сети A на сеть B, все запросы на изображения начинают возвращаться с исключением.

не удалось, исключение

> org.apache.http.conn.HttpHostConnectException: Connection to
> https://m1.testapp.com refused    at
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
>   at
> org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
>   at
> org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
>   at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
>   at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
>   at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
>   at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
>   at
> com.testApp.android.ws.PooledRequestProcessor$Runner.run(PooledRequestProcessor.java:298)
>   at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
>   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
>   at java.lang.Thread.run(Thread.java:856)  Caused by:
> java.net.ConnectException: failed to connect to /109.233.153.38 (port
> 443) after 20000ms: isConnected failed: EHOSTUNREACH (No route to
> host)     at
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:181)
>   ... 10 more  Caused by: java.net.SocketException: failed to connect
> to /109.233.153.38 (port 443) after 20000ms: isConnected failed:
> EHOSTUNREACH (No route to host)   at
> libcore.io.IoBridge.isConnected(IoBridge.java:220)    at
> libcore.io.IoBridge.connectErrno(IoBridge.java:152)   at
> libcore.io.IoBridge.connect(IoBridge.java:112)    at
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)    at
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)    at
> java.net.Socket.connect(Socket.java:842)      at
> org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
>   at
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
>   ... 10 more  Caused by: libcore.io.ErrnoException: isConnected
> failed: EHOSTUNREACH (No route to host)   at
> libcore.io.IoBridge.isConnected(IoBridge.java:201)

Самое странное, что даже удаление приложения и переустановка его не исправят его, просто выключив и включив телефон.

Я видел подобную проблему здесь http://groups.google.com/group/newsrob/browse_thread/thread/ea2f26d9d1753b79/5800e268eeab399c#5800e268eeab399c. Проблема не возникает на телефонах с 4.0.3, только на телефонах с 4.0.1, и обновление пока недоступно в Европе.

Ответы [ 5 ]

2 голосов
/ 27 августа 2012

Может быть, для переключения требуется какое-то время?Вы можете проверить, есть ли активное сетевое соединение, прежде чем сделать запрос:

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo                 = connectivityManager.getActiveNetworkInfo();

if (networkInfo != null && networkInfo.isConnected() && networkInfo.isAvailable())
{
    // DO WHAT YOU NEED TO DO ON THE NETWORK
}
else
{
    // PROMPT USER THAT NETWORK IS DISCONNECTED

        Toast.makeText(this, "There is no active network connection!", 5000).show();
}
0 голосов
/ 21 августа 2018

У меня была такая же проблема, вот как я ее решил.

  1. Отключить брандмауэры
  2. перейдите в папку вашего сервера (в моем случае я использовал Node.js) WWW-файл и прослушайте предоставленный порт на всех сетевых интерфейсах.

    server.listen (порт, '10 .8.75.204 ');

    server.on('error', onError);
    server.on('listening', onListening);
    
  3. Убедитесь, что IP-адрес - это IP-адрес вашей локальной сети, для вдов это можно получить, набрав ipconfig в командной строке.

  4. перезагрузите сервер и попробуйте подключиться снова.

0 голосов
/ 15 июля 2015

ошибка: EHOSTUNREACH (нет маршрута к хосту)

Таким образом, маршрут не был настроен правильно.

Я обнаружил, что для некоторых устройств вы должны установить для поля WifiConfiguration ipAssignment значение WifiConfiguration.IpAssignment.DHCP вручную, чтобы запрос DHCP выполнялся после программного изменения Wi-Fi. Это можно сделать только с помощью отражения, см. Этот ответ, как его кодировать . Перехват всех исключений, потому что на других устройствах поле даже не существует.

0 голосов
/ 15 июля 2014

Похоже, у вас проблемы с протоколом TCP. Это может быть в случае слабого сигнала WiFi или 3G. Используйте try / catch для этого.

0 голосов
/ 02 января 2013

При переключении и установке с новым сетевым устройством может потребоваться некоторое время. Код ниже может помочь вам.

ConnectivityManager connMngr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
    return connMngr.getActiveNetworkInfo().isConnectedOrConnecting();
}
catch (NullPointerException npe) {
    return false;
}
...