我有socket服务器/客户端应用程序。 "服务器"正在等待来自"客户端"的数据,但如果客户端已被终止,则服务器会抛出EOFException
。
我在服务器套接字的代码中的某处:
private ObjectInputStream in;
在某处我读了数据:
in.readObject();
我应该只围绕in.readObject();在try-catch块还是有另一种解决方案?
答案 0 :(得分:2)
如果您查看ObjectInputStream.readObject的Javadoc API,您将看到异常列表
IOException(其中99%的时间是SocketException(IOException的子类)是Socket已关闭的特殊情况,因此您应该像处理连接一样处理它。
然而,所有其他例外情况都表明您的客户正在向您发送您不期望的内容。您应该按名称捕获每个例外,并发回一条消息,说明他们需要将客户端软件版本更新为服务器准备与之通信的版本。将该消息刷新,然后最好关闭套接字。
答案 1 :(得分:1)
您可以使用以下内容。 EOFException
是IOException
的直接子类。你还应该抓住IOException
。
try{
....
in.readObject();
....
} catch(EOFException ex1){
// eof exception is thrown
} catch(IOException ex2){
// other types of IO exception is thrown
}