使用socket时遇见的异常

时间:2025-05-12 09:43:18

这个博客解决了我的疑惑:/yiwangzhibujian/p/

我出现的原因主要是我使用了ObjectInputStream和ObjectOutputStream流,传递对象的方式传递数据。并且,我在catch中做了关闭流和socket的操作,导致出现这个异常后,就无法继续后面的流程了。

解决方式:

1、单独catch,与别的异常处理方式区分开

2、使用别的输入输出流代替ObjectInputStream的形式的流。

下面是使用方式一的简单示例。

客户端发送:

public void send(User user){
    try{
        ObjectOutputStream oos = new ObjectOutputStream(());
        (user);
        ();
    }catch (Exception e) {
           
    }finally {
        if(oos!=null){
            ();
        }
    }
}


服务端接收:(其实在捕获的Exception中是包含EOFException的,但是我在Exception中做了一些流的关闭等操作,所以就会有异常的出现)

public void receive(){
    try{
        ObjectInputStream ois = new ObjectInputStream(());
        User user = (User) ();
    }catch(EOFException eof){
        //单独捕获这个异常
    }catch (Exception e) {
        //这里再做先前的流和socket的关闭,就不会因EOFException的问题,而导致程序中断的问题了。
    }finally {
        if(ois!=null){
            ();
        }
    }
}

注:代码中的User是要发送的对象类,实现了Serializable接口。

另:

在使用objectOutputStream和ObjectInputStream时,也有时会有的异常,这个通过输出的日志,很容易可以知道,是因为,客户端和服务端创建的对象类不同,不仅类名要相同,包名也要相同。