2012-07-23 69 views
2

我正試圖在java中創建一個相當簡單的客戶機/服務器應用程序。客戶端有兩個線程,服務器有兩個線程(每個客戶端),一個用於輸入和輸出。我通過Object Streams幾乎不斷地發送數據。讀取()塊。我需要能夠中斷read()線程(即斷開連接)。我該怎麼做呢?可中斷套接字讀取Java

+0

認爲這[鏈接](http://www.roseindia.net/javatutorials/shutting_down_threads_cleanly.shtml)實際上可以幫助你。 – Jasonw 2012-07-23 01:33:53

+0

你有沒有嘗試使用非阻塞讀取插座?還有一個循環來不斷檢查一個條件,以便當你需要斷開連接時,你可以在非阻塞讀取返回後斷開連接?您可以使用NIO或setSoTimeout來創建一個非阻塞套接字。 – 2012-07-23 02:50:58

回答

1

只需關閉包裝在套接字上的輸出流即可。如果這也阻止了您的平臺,請使用讀取超時並讓讀卡器在每次跳閘時檢查斷開連接標誌。

1

關閉Socket,並且read方法將被中斷IOException。處理這個異常來清理你的線程。

0

您可以使用非阻塞呼叫或在線程上使用Interrupt method。一旦中斷,讀操作將拋出一個異常,你可以捕捉並很好地結束線程。

+1

只有套接字是InterruptibleChannel時,這纔是真的。 – EJP 2012-07-24 02:27:25