2013-01-21 143 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的频道似乎是开放的,即使我删除了电缆..