2012-03-22 9 views
2

私はアンドロイド2.3.3用のアンドロイドソケットクライアントアプリケーションを作成しました。 これはXML要求を送信し、応答をcobolソケットサーバーから受信します。Androidソケットは常にタイムアウトで終了する

アプリケーションは完全に正常に動作します。私の問題は、クライアントアプリケーションがすべてのデータを読み込んだら、何らかの理由でタイムアウト制限を待っています。

相続コード:

Socket socket = new Socket(serverIpAddress, serverPort); 
socket.setSoTimeout(2000); 

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 

String request = ("Some XML Request"); 
out.println(request); 
out.flush(); 

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
Log.d("Nicklas", "Reader Oprettet"); 
Vector<String> v = new Vector<String>(); 
int i = 0; 
Boolean KeepGoing = true; 
while (KeepGoing) 
{ 

    try 
    { 
     String lol = in.readLine(); 
     if (lol == null) { KeepGoing = false; } 
     v.add(new String(lol)); 
     i++; 
    } 
    catch (Exception e) 
    { 
     Log.d("NickEEEXX", e.toString()); 
     KeepGoing = false; 
    }      
} 

それは常に例外「java.net.SocketTimeoutException」と、キャッチで終了 - それが送られ、右のデータを受け取った場合であっても。これにより、プログラムが大幅に遅くなります。

このセクションのGUIを変更する必要があるため、このコードをスレッドではなくメソッドとして実行しています。

誰もがタイムアウトを待つ理由はありますか?

答えて

0

lolは、これ以上データがない場合はnullではありません。空の文字列をチェックしてみてください。

+0

私は 'if(lol == ""){KeepGoing = false; } 'でも違いはありません。 – user1285334

+0

**私はこれを解決する一つの方法を考え出しました。私が返すXML応答はいつもで終わるので、私は単にlol(readlineの変数)にそれが含まれているかどうかを尋ねます。 ** – user1285334

+0

文字列で '=='演算子を使用できないことはご存知でしょうか?私は時々それを逃す。 – josephus

関連する問題