尝试与Web服务通信时遇到“无路由到主机”错误

我正在尝试与笔记本电脑上的Web服务进行通信,并使用Android手机作为客户端。 我试图做一个简单的登录function,但是,只要客户端尝试与Web服务进行通信,就会在Eclipse上的DDMS中弹出此错误。 我可以通过我的家庭网络访问网络服务,但是当我在学校时却无法访问网络服务。 如果您可能会问这个问题,我的sch中的IP地址是172.22.XX.XX. 虽然我知道是私有IP地址,但即使我的Android手机连接到同一个网络,它仍然无法与我的笔记本电脑上运行的网络服务进行通信。 谁能告诉我如何解决这个问题

10-20 15:00:42.875:ERROR / AndroidRuntime(6728):fillInStackTrace():java.net.SocketException:无主机路由

这是完成工作的function:

public String[] getPassword(String loginID){ String[] temp = null; SoapObject request = new SoapObject(NAMESPACE, "GetPassword"); PropertyInfo quotesProperty = new PropertyInfo(); quotesProperty.setName("LoginID"); quotesProperty.setValue(loginID); quotesProperty.setType(String.class); request.addProperty(quotesProperty); envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); String result = ""; HttpTransportSE httpRequest = new HttpTransportSE(URL); httpRequest.debug = true; try { httpRequest.call(SOAP_ACTION, envelope); Log.e("Request",httpRequest.requestDump.toString()); SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); Log.e("Response",httpRequest.responseDump.toString()); result = response.toString(); if(result != null){ temp = result.split(";"); passwordSecurity crypto = new passwordSecurity(); temp[0]= crypto.cryptography(temp[0], false); //decrypt the password } } catch(Exception e) { e.printStackTrace(); Log.e("AndroidRuntime", "getMessage(): "+e.getMessage()); Log.e("AndroidRuntime", "getLocalizedMessage(): "+e.getLocalizedMessage()); Log.e("AndroidRuntime", "fillInStackTrace(): "+e.fillInStackTrace().toString()); } return temp; } 

来自DDMS的警告

 10-20 16:56:32.180: WARN/System.err(13034): java.net.SocketException: No route to host 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 10-20 16:56:32.180: WARN/System.err(13034): at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 10-20 16:56:32.180: WARN/System.err(13034): at java.net.Socket.connect(Socket.java:1002) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:75) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:48) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267) 10-20 16:56:32.180: WARN/System.err(13034): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205) 10-20 16:56:32.180: WARN/System.err(13034): at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:76) 10-20 16:56:32.180: WARN/System.err(13034): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:146) 10-20 16:56:32.180: WARN/System.err(13034): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 10-20 16:56:32.180: WARN/System.err(13034): at android.wps.server.operations.WifiPositioningServices.getPassword(WifiPositioningServices.java:43) 10-20 16:56:32.180: WARN/System.err(13034): at android.wps.MainActivity$1.onClick(MainActivity.java:67) 10-20 16:56:32.180: WARN/System.err(13034): at android.view.View.performClick(View.java:2538) 10-20 16:56:32.180: WARN/System.err(13034): at android.view.View$PerformClick.run(View.java:9152) 10-20 16:56:32.180: WARN/System.err(13034): at android.os.Handler.handleCallback(Handler.java:587) 10-20 16:56:32.180: WARN/System.err(13034): at android.os.Handler.dispatchMessage(Handler.java:92) 10-20 16:56:32.180: WARN/System.err(13034): at android.os.Looper.loop(Looper.java:123) 10-20 16:56:32.180: WARN/System.err(13034): at android.app.ActivityThread.main(ActivityThread.java:3691) 10-20 16:56:32.180: WARN/System.err(13034): at java.lang.reflect.Method.invokeNative(Native Method) 10-20 16:56:32.180: WARN/System.err(13034): at java.lang.reflect.Method.invoke(Method.java:507) 10-20 16:56:32.180: WARN/System.err(13034): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 10-20 16:56:32.180: WARN/System.err(13034): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 10-20 16:56:32.180: WARN/System.err(13034): at dalvik.system.NativeStart.main(Native Method) 

从Android模拟器内部 ,主机(您的笔记本电脑)是10.0.2.2 – 这应该始终有效,无论主机具有什么实际IP地址。

我在这里遇到了同样的问题,平板电脑(motorola xoom 3.2)设备。

平板电脑是192.168.1.2 pc 192.162.1.3

当我将url设置为192.162.1.3时,我得到了这个堆栈跟踪

 12-10 22:18:22.050: WARN/System.err(6274): java.net.SocketException: No route to host 12-10 22:18:22.050: WARN/System.err(6274): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 12-10 22:18:22.050: WARN/System.err(6274): at dalvik.system.****BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:369)**** 

当我尝试一个不存在的ip时,我仍然没有得到主机的路由,但是堆栈跟踪中没有这个拦截器。 环回或浏览器也可以正常工作。

https://groups.google.com/group/android-developers/browse_thread/thread/7d96e7297da43cec

我猜它是同一个问题,但没有任何线索

vodoo解决方案:重新启动平板电脑并遇到同样的问题之后,我所做的就是在设备上禁用usb-debugging,断开wlan(飞行模式),重新连接,重新启动usb调试,出于某种原因,这似乎解决了这个问题

由于身份validation问题,我在从另一台PC连接到我的(ASP.NET)Web服务时遇到问题。 validation问题解决后,我仍然从我的Android应用程序中收到“无路由到主机”错误。 关闭我的设备上的WiFi并重新打开解决了这个问题。

就我而言,我的代码在我的webservice中看起来像这样:

 public static Song GetSong() { Song song = null; // Some database operations // Then initialized the object with some data if(someValueReturnedFromDb) { song = new Song(); song.Source = "Path"; // etc } return song; } 

之后我只是将代码更改为:

 public static Song GetSong() { Song song = new Song(); // Some database operations // Then initialized the object with some data if(someValueReturnedFromDb) { song.Source = "Path"; // etc } return song; }