2014-01-14 24 views
-1

最近,我注意到在我得到的例外,當我試圖在套接字上寫我的多線程Java套接字句柄,但是我仍然通過接收數據的讀取。這是我的理解,如果套接字已關閉,則輸入​​流讀取器在嘗試下一次讀取時也會拋出套接字關閉異常。這是不是這種情況,如果我在嘗試寫入時遇到此異常,應該手動關閉套接字嗎?關閉套接字上寫流,但讀的時候不

+0

你發佈的兩段代碼真的沒有告訴我們任何東西。關閉'OuputStream'而不是'InputStream'是完全可能的。遠程節點也可能關閉套接字,寫入操作將失敗,同時仍然從TCP或應用程序緩衝區讀取數據。 –

+0

好的Bri​​an Roach。我不確定他們是否會認爲我會將它們發佈以防萬一。 – dreza

+0

只是說,如果沒有更多的細節或示例代碼來重現問題,那麼您描述的行爲有很多原因。 –

回答

2

TCP連接可以在寫入方向上關閉,但不能在讀取方向上關閉,這種連接稱爲「half closed」。您應該繼續閱讀對方發送的其餘數據,否則連接將無法正常關閉。

如果你想想看,怎麼回事你能三立關閉一個TCP連接?如果一步完成關閉它,如果對方在完成關閉之前向您發送了一些數據,會發生什麼情況?你仍然需要接收它。但是,顯然,你無法繼續發送數據。