ErrnoException:isConnected failed:使用ICS更改wifi网络时EHOSTUNREACH(无主机路由)

时间:2012-01-09 10:53:19

标签: android android-4.0-ice-cream-sandwich

在ics上使用我的应用程序后,在将我的wifi网络从networkA更改为networkB后,所有图像请求都会以异常方式开始返回。

失败,异常

> 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 个答案:

答案 0 :(得分:2)

由于某种原因,可能需要一段时间才能进行切换?您可以在发出请求之前检查是否存在活动的网络连接:

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();
}

答案 1 :(得分:0)

使用新网络设备进行切换和建立可能需要一些时间。以下代码可能对您有所帮助。

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

答案 2 :(得分:0)

看起来你有TCP协议的问题。它可能在弱WiFi或3G信号的情况下。使用try / catch。

答案 3 :(得分:0)

  

失败:EHOSTUNREACH(无主机路由)

因此路由设置尚未正确。

我发现对于某些设备,您必须手动将WifiConfiguration的{​​{1}}字段设置为ipAssignment,以便在以编程方式更改wifi后执行DHCP请求。这只能通过反射see this answer how to code it来完成。捕获所有异常,因为在其他设备上该字段甚至不存在。

答案 4 :(得分:0)

我遇到了同样的问题,这就是我的解决方法。

  1. 禁用防火墙
  2. 转到您的服务器文件夹(在我的情况下,我使用的是Node.js)WWW文件,并在所有网络接口上的提供的端口上进行监听。

    server.listen(port,'10 .8.75.204');

    server.on('error', onError);
    server.on('listening', onListening);
    
  3. 确保IP地址是您的本地网络IP,在寡妇上,可以通过在命令提示符下键入 ipconfig 来获得。

  4. 重新启动服务器,然后尝试重新连接。