1

Android アプリで BufferedReader を使用して、Web サーバーから 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 に答える