我在Java中使用ServerSocket
和ObjectOuputStream
将我的项目的某些对象从客户端传输到服务器。我知道Java中的ServerSocket
类使用TCP,因此不应丢弃任何数据包,但如果客户端在流式传输对象时崩溃会发生什么?我是否需要自己处理这个问题,或者Java会认识到通过流的对象是不完整的吗?
答案 0 :(得分:2)
根据连接断开的方式,您可以在服务器上获得多个例外之一。您的服务器可能会因Connection reset by peer
等异常而抱怨。是的,您的容器可以识别连接未正确终止。容器抛出的异常将表明这一点。
请注意,在某些情况下,客户端可能会完全转移您的对象,但服务器可能仍然无法获取它。位于两者之间的负载平衡器可能由于未知原因而切断连接。考虑那些情况。
答案 1 :(得分:0)
ServerSocket不会中断。发送到Socket的数据被中断。 ObjectInputStream.readObject()方法将抛出IOException或可能永久阻塞,具体取决于故障模式。要避免后者,请在Socket上设置读取超时。然后它会抛出一个SocketTimeoutException。