有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理终止socket“客户端”的正确方法是什么

我有socket服务/客户端应用程序。“服务器”正在等待来自“客户端”的数据,但如果客户端已终止,服务器将抛出EOFException

在服务器socket的代码中,我有:

private ObjectInputStream in;

我在某个地方读到了数据:

in.readObject();

所以我应该围在里面。readObject();在try catch block中还是有其他解决方案


共 (2) 个答案

  1. # 1 楼答案

    你可以像下面这样使用EOFExceptionIOException的一个直接子类。您还应该捕获IOException

    try{
        ....
        in.readObject();
        ....
    } catch(EOFException ex1){
        // eof exception is thrown
    } catch(IOException ex2){
        // other types of IO exception is thrown
    }
    
  2. # 2 楼答案

    如果您在JavadocAPI中查找ObjectInputStream。readObject,您将看到异常列表

    • ClassNotFoundException-无法创建序列化对象的类 找到了
    • InvalidClassException使用的类有问题 序列化
    • 流中的StreamCorruptedException控制信息不一致
    • 在流中找到OptionalDataException原语数据,而不是对象
    • IOException—任何与输入/输出相关的常见异常

    IOException(99%的时间是SocketException(IOException的子类))是套接字关闭的特例,因此您应该像断开连接一样处理它

    但是,所有其他异常都表明您的客户正在向您发送您不期望的内容。您应该按名称捕获每个异常,并发回一条消息,说明它们需要将客户端软件版本更新为服务器准备好与之通信的版本。清除该消息,然后最好关闭套接字