2012-03-22 34 views
2

我爲Android 2.3.3製作了一個Android套接字客戶端應用程序。 它發送一個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; 
    }      
} 

它總是在catch結束,除「java.net.SocketTimeoutException」 - 即使它已發送和收到正確的數據。這會減慢程序的速度。

我正在運行此代碼作爲一種方法,而不是一個線程,因爲我需要更改本節中的GUI。

有沒有人有任何想法,爲什麼它等待超時?

回答

0

也許lol不是null當沒有更多的數據。嘗試檢查一個空白字符串。

+0

我試過'if(lol ==「」){KeepGoing = false; }'也一樣,沒有區別。 – user1285334 2012-03-22 11:14:14

+0

**我想通過一種方法解決這個問題。我回來的XML回覆總是以結尾,所以我只是問lol(readline的變量)是否包含該回復。 ** – user1285334 2012-03-22 11:21:06

+0

你知道你不能在字符串上做'=='操作符,對吧?有時候我也很想念。 – josephus 2012-03-22 11:28:51