1

我在 Android 应用程序中使用 BufferedReader 从网络服务器检索 XML 文件。我目前拥有的代码可与许多其他文件一起使用。但是对于这个特定的文件,我得到了一个 SocketTimeoutException。下面是我的代码:

socket = new Socket();
socket.connect(new InetSocketAddress(address, intPort), 5000);
String data;
socket.setSoTimeout(5000); //timeout after X milliseconds
dos = new DataOutputStream(socket.getOutputStream());
dis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
dos.write(requestmsg.getBytes());
dos.flush();
StringBuilder sb = new StringBuilder();
while ((data = dis.readLine()) != null)
    sb.append(data);

returnData = sb.toString();

当我查看 dis 的缓冲区时,我可以在那里看到整个文件:

缓冲区的屏幕截图

但是在阅读了这么多之后它抛出了异常:

HTTP/1.1 200 OKCache-Control: no-storeContent-Type: text/xmlContent-Length: 215

这是我要读取的文件:

<?xml version="1.0" encoding="ISO-8859-1"?><datavalues>...</datavalues>

这是我的 logcat 错误输出:

11-05 08:22:41.551 3750-3779/ W/System.err: java.net.SocketTimeoutException
11-05 08:22:41.553 3750-3779/ W/System.err:     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:492)
11-05 08:22:41.555 3750-3779/ W/System.err:     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
11-05 08:22:41.556 3750-3779/ W/System.err:     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
11-05 08:22:41.558 3750-3779/ W/System.err:     at java.io.InputStreamReader.read(InputStreamReader.java:233)
11-05 08:22:41.560 3750-3779/ W/System.err:     at java.io.BufferedReader.fillBuf(BufferedReader.java:145)
11-05 08:22:41.562 3750-3779/ W/System.err:     at java.io.BufferedReader.readLine(BufferedReader.java:397)    
…
11-05 08:22:41.568 3750-3779/ W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-05 08:22:41.570 3750-3779/ W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-05 08:22:41.572 3750-3779/ W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-05 08:22:41.573 3750-3779/ W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-05 08:22:41.574 3750-3779/ W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-05 08:22:41.575 3750-3779/ W/System.err:     at java.lang.Thread.run(Thread.java:841)

我不确定问题是否出在 XML 文件中,或者我的代码中是否需要更改某些内容。

4

1 回答 1

0

您可以在通过isConnected方法读取传入数据之前检查套接字是否已连接

在你的情况下

if(socket.isConnected()){
// read  output stream socket.getOutputStream()
}else{
 // make another try ...  
 }
于 2016-01-10T12:19:04.560 回答