2013-01-21 38 views
2

在我的軟件中,我需要通過ObjectOutputStream在客戶端和服務器之間發送消息。ObjectOutputStream異常捕獲

發件人方法的核心是:

.... 

try { 
    objWriter.writeUnshared(bean); 
    objWriter.flush(); 
} catch (Exception e) { 
    .... 
} 

... 

Windows XP上運行我的應用程序在網絡電纜被刪除的writeUnsahred扔給我一個例外。

現在我試圖運行我的應用程序到Ubuntu 12.10和該方法不會拋出任何東西,如果我刪除電纜!

任何提示?

+0

所以你想在Ubuntu上得到異常呢? –

+0

是的..我需要重試發送,如果我得到異常..並最終關閉連接! –

+0

java.io.ObjectOutputStream,用這個初始化:「new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()))」 –

回答

1

無論當你得到異常取決於:

  • 多大的套接字發送緩衝區是您的最終
  • 多大的套接字接收緩衝區是在對等
  • 多少未確認數據你已經寫了
  • 你寫了多長時間了,你的TCP堆棧的內部定時器是多少。

您可以從Java控制的唯一部分是您自己的套接字發送緩衝區。因此,何時以及是否會發生例外情況是完全不可預測的。因此,您不得編寫應用程序以依賴特定的行爲。

0

是的,但遵循由writeUnshared和flush調用的方法,我看到寫入(OutputStream.class:106)被調用,並且如果流關閉,此方法必須生成異常......所以我使用該信息來檢查是否我的頻道是積極的..問題是,在Ubuntu的頻道似乎是開放的,即使我刪除了電纜..