2010-08-28 78 views
1

我試圖運行一個線程,轉到套接字,抓取輸入流,並讀取它。我創建了數百個這樣的線程,並設置了讀取超時,但線程仍然停留在read()行。java inputStream凍結

public void readPack() { 

socket.setSoTimeout(4*1000); 

if (socket.isConnected()) { 


    buffer parse = new buffer(); 
    parse.addByte((byte) skt.getInputStream().read()); 
    parseIncoming(parse); 
} 


} catch (Exception e) {} 

} 
+0

這裏沒有足夠的信息來猜測問題所在。 – msw 2010-08-28 00:20:58

回答

0

呼叫skt.available(),然後調用讀了很多次,或使用skt.read(byte[])。其他明智的skt.read()將阻止。您的設置超時連接到套接字,而不是讀取超時。

+0

他正在設置的超時是讀取超時,而不是連接超時。 – EJP 2010-08-28 01:23:44

1

奇怪的代碼。您創建一個緩衝區,讀取一個字節,然後解析該字節,然後重複整個過程。一個字節肯定不會太多解析。你永遠不會從讀取中檢查-1,所以當對端斷開連接時,這個循環將無休止地旋轉。最後,Socket.isConnected()不是一個有用的測試,具體而言,它不檢測對等連接斷開。

+0

雖然假設是一個if,只是想拿起一個字節 – koolaid2345 2010-08-28 01:33:39

+0

它仍然是錯誤的,見上文。 – EJP 2010-08-28 03:19:31