2

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

sender方法的核心如下:

....

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

...

当网络电缆被移除时,在 Windows XP 上运行我的应用程序 writeUnsahred 抛出异常。

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

有什么提示吗??

4

2 回答 2

1

是否以及何时获得异常取决于:

  • 你端的套接字发送缓冲区有多大
  • 对等端的套接字接收缓冲区有多大
  • 你已经写了多少未确认的数据
  • 你写了多久了,和
  • TCP 堆栈的内部计时器。

您可以从 Java 控制的唯一部分是您自己的套接字发送缓冲区。因此,何时以及是否会传递异常是完全不可预测的。因此,您不得将应用程序编写为依赖于特定行为。

于 2013-01-21T23:17:56.763 回答
0

是的,但是按照 writeUnshared 和 flush 调用的方法,我看到 write(OutputStream.class:106) 被调用,如果流关闭,此方法必须生成异常......所以我使用该信息来检查我的频道是否处于活动状态..问题是在ubuntu中,即使我拔掉电缆,频道似乎也是打开的。

于 2013-01-22T15:36:02.470 回答