【问题标题】:Exception catch on ObjectOutputStreamObjectOutputStream 上的异常捕获
【发布时间】:2013-01-04 14:19:18
【问题描述】:

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

sender方法的核心如下:

....

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

...

拔掉网线后在 Windows XP 上运行我的应用程序时 writeUnsahred 会抛出异常。

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

有什么提示吗??

【问题讨论】:

  • 所以你也想在 ubuntu 上获得例外?
  • 是的..如果出现异常,我需要重试发送..并最终关闭连接!
  • java.io.ObjectOutputStream,使用这个初始化:"new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()))"
  • @Fildor 不,他没有使用 NIO,他使用的是 java.io.ObjectOutputStream。一个毫无意义的问题。
  • @EJP 哎呀。你说得对。在过去的几天里,我在两者之间跳跃......

标签: java ubuntu client-server objectoutputstream


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2012-02-07
      • 2012-12-18
      • 2010-09-28
      相关资源
      最近更新 更多