2012-10-28 81 views
1

我在Java中使用ServerSocketObjectOuputStream將我的項目的一些對象從客戶端傳輸到服務器。我知道Java中的ServerSocket類使用TCP,因此不應丟棄數據包,但如果客戶端在傳輸對象時崩潰,會發生什麼情況?我是否需要自己處理這個問題,還是Java會認識到通過流傳入的對象不完整?在對象傳輸過程中Java ServerSocket中斷時會發生什麼?

+0

如果你的服務器讀取一個客戶端的* InputStream *並且客戶端消失,那麼你會得到一個早熟的* EOF *,一個* IOException *或一個掛起的連接(我不確定哪一個,但你應該預料到哪一個) 。只有當你的客戶有告訴服務器的方法時,才能檢測到早期* EOF * *好的,我完成了*。如果您在從客戶端接收數據時收到* IOException *,應該放棄連接並在適當的地方記錄錯誤。掛起的連接可以使用超時處理([這裏有一篇關於此的好帖子](http://stackoverflow.com/q/804951/433835))。 –

回答

2

根據連接被切斷的方式,您可能會在服務器上出現幾個例外之一。您的服務器可能會發出異常,如Connection reset by peer。是的,您的容器可以識別連接沒有正確終止。你的容器拋出的異常將表明這一點。

請注意,有些情況下客戶端可能會完全傳輸您的對象,但服務器可能仍然無法獲取它。位於兩者之間的負載平衡器可能會因不明原因斷開連接。也考慮這些情況。

0

ServerSocket不會中斷。發送到Socket的數據被中斷。根據失敗模式,ObjectInputStream.readObject()方法將引發IOException或永遠阻塞。爲了避免後者,請在Socket上設置讀取超時。然後它會拋出一個SocketTimeoutException。

相關問題