在对象传输期间Java ServerSocket被中断时会发生什么?

时间:2012-10-28 13:46:23

标签: java sockets servlets stream

我在Java中使用ServerSocketObjectOuputStream将我的项目的某些对象从客户端传输到服务器。我知道Java中的ServerSocket类使用TCP,因此不应丢弃任何数据包,但如果客户端在流式传输对象时崩溃会发生什么?我是否需要自己处理这个问题,或者Java会认识到通过流的对象是不完整的吗?

2 个答案:

答案 0 :(得分:2)

根据连接断开的方式,您可以在服务器上获得多个例外之一。您的服务器可能会因Connection reset by peer等异常而抱怨。是的,您的容器可以识别连接未正确终止。容器抛出的异常将表明这一点。

请注意,在某些情况下,客户端可能会完全转移您的对象,但服务器可能仍然无法获取它。位于两者之间的负载平衡器可能由于未知原因而切断连接。考虑那些情况。

答案 1 :(得分:0)

ServerSocket不会中断。发送到Socket的数据被中断。 ObjectInputStream.readObject()方法将抛出IOException或可能永久阻塞,具体取决于故障模式。要避免后者,请在Socket上设置读取超时。然后它会抛出一个SocketTimeoutException。