ObjectOutputStream上的异常捕获

时间:2013-01-21 13:52:32

标签: java ubuntu client-server objectoutputstream

在我的软件中,我需要通过ObjectOutputStream在客户端和服务器之间发送消息。

发送方法的核心如下:

....

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

...

当删除网络电缆时在Windows XP上运行我的应用程序writeUnsahred给我一个例外。

现在我正在尝试将我的应用程序运行到ubuntu 12.10中,如果我移除电缆,该方法不会抛出任何东西!

任何提示??

2 个答案:

答案 0 :(得分:1)

是否以及何时获得例外取决于:

  • 套接字发送缓冲区的大小在你的最后
  • 套接字接收缓冲区在对等端的大小
  • 您已编写了多少未确认的数据
  • 自写这篇文章以来已经有多久了,
  • TCP堆栈的内部计时器。

您可以从Java控制的唯一部分是您自己的套接字发送缓冲区。因此,如果例外情况发生,则完全无法预测。因此,您不得编写应用程序以依赖特定行为。

答案 1 :(得分:0)

是的,但是按照writeUnshared和flush调用的方法,我看到write(OutputStream.class:106)被调用,如果流被关闭,这个方法必须生成异常...所以我用这些信息来检查我是否频道是活跃的...问题是,在ubuntu中,即使我移除了电缆,频道似乎也是开放的。