Android 下载文件时出现问题

Android 下载文件时出现问题,android,Android,我面临的问题是:我尝试使用以下代码从tomcat服务器下载一个文件 try { BufferedInputStream getit = new BufferedInputStream(new URL("http://192.168.2.180:8080/android.apk").openStream()); FileOutputStream saveit = new FileOutputStream(path); BufferedOutputStream bout = ne

我面临的问题是:我尝试使用以下代码从tomcat服务器下载一个文件

try
 {
   BufferedInputStream getit = new BufferedInputStream(new URL("http://192.168.2.180:8080/android.apk").openStream());
   FileOutputStream saveit = new FileOutputStream(path);
   BufferedOutputStream bout = new BufferedOutputStream(saveit,1024);
   byte data[] = new byte[1024];
   int readed = getit.read(data,0,1024);
   while(readed != -1)
    {
        bout.write(data,0,readed);
        readed = getit.read(data,0,1024);
    }
    bout.close();
    getit.close();
    saveit.close();
}
catch(Exception e)
{
   e.printStackTrace
}
当我在emulator上运行它时,上面的操作很好,但是当我尝试在我的设备上测试它时,它什么也不做,大约50秒后,它会在线路上抛出一个“套接字超时”异常

 BufferedInputStream getit = new BufferedInputStream(new URL("http://192.168.2.180:8080/android.apk").openStream());
这是怎么回事?我该如何解决

这是stacktrace

04-19 12:28:19.865: WARN/System.err(2962): java.net.SocketException: The operation timed out
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(Native Method)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:125)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:227)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:521)
04-19 12:28:19.865: WARN/System.err(2962): at java.net.Socket.connect(Socket.java:1019)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:67)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager$ConnectionPool.getHttpConnection(HttpConnectionManager.java:151)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager.getConnection(HttpConnectionManager.java:73)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getHTTPConnection(HttpURLConnection.java:826)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:812)
04-19 12:28:19.865: WARN/System.err(2962): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1054)
04-19 12:28:19.865: WARN/System.err(2962): at java.net.URL.openStream(URL.java:674)
04-19 12:28:19.865:WARN/System.err(2962):java.net.SocketException:操作超时
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(本机方法)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:125)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:227)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:521)
04-19 12:28:19.865:WARN/System.err(2962):位于java.net.Socket.connect(Socket.java:1019)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:67)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager$ConnectionPool.getHttpConnection(HttpConnectionManager.java:151)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager.getConnection(HttpConnectionManager.java:73)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getHTTPConnection(HttpURLConnection.java:826)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:812)
04-19 12:28:19.865:WARN/System.err(2962):位于org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1054)
04-19 12:28:19.865:WARN/System.err(2962):位于java.net.URL.openStream(URL.java:674)

正如Samuh所说,检查您是否可以访问私有ip。 此外,您还应该正确捕获超时异常,向用户显示对话框或Toast

请记住,如果您愿意在手机应用程序中使用3g,我建议您使用以下方式增加超时值:

setConnectTimeout(CONNECT_TIMEOUT);
setReadTimeout(READ_TIMEOUT);

问题来自端口8080,请尝试使用默认url,如。
(默认端口=80)它可以工作。

主机IP:在公共网络上可用吗?这是我的公司IP!坦白地说,我不知道,我怎么能检查这个?是的。从同一网络上的另一个comp,我在浏览器中键入192.168.2.180:8080,tomcat主页被关闭loaded@klaus-弗拉德:你的设备使用的是3g还是wifi?设备有什么ip?wifi,我还不知道设备有什么ip。