2012-10-27 107 views
0

我有一個客戶端和一個服務器應用程序,客戶端發送一個數據字節,表示用戶已關閉客戶端窗口並終止客戶端程序。問題在於服務器可能會在丟棄他之前向該客戶端發送最後一個通知。如果服務器在阻塞模式下使用SocketChannel的寫入方法,它會無限期地阻塞還是被忽略?在斷開連接之前,我應該讓客戶端等待「斷開連接確認」嗎?發送數據到客戶端通過SocketChannel關閉他的

回答

1

它不會永遠阻止,也不會被忽略。如果數據在套接字發送緩衝區中有空間,它完全不會阻塞。如果它阻塞了,它可能會產生一個IOException:'通過對等方重置連接',或者它可能只是解鎖並正常返回。沒有預測到這一點。情況不正確,不應該被允許發生。你可以通過關閉兩個插座輸出然後閱讀,直到你得到一個EOS;那麼雙方都處於同一點並可能關閉。

1

對您的上一個問題「是」。您應該設計並實施告別協議,其中包括客戶端不會發送或讀取任何更多應用級數據的狀態,但仍在等待最後確認。

相關問題