喜悦无忧 2017-12-02 09:48 采纳率: 50%
浏览 1882
已采纳

请教,ObjectOutputStream写入到网络中报错!

我使用ObjectOutputStream从客户端写入对象到网络中,在服务器端读取对象,
然后保存到文件中。但是当我把对象写入到网络中时,出现异常。
client.java

 public class Client<M> {

    public void add(M m) {//向远程网络中存储对象
        Socket socket;
        ObjectOutputStream oos = null;
        try {
            try{
                socket = new Socket("127.0.0.1", 8011);
                OutputStream os = socket.getOutputStream();
                oos = new ObjectOutputStream(os);
                oos.writeObject(m);
                oos.flush();
            }finally {
                if(oos!=null){
                    oos.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

}

Server.java

 public class Server {
    public static void main(String[] args) {
        new Server().startServer();
    }
    public void startServer(){
        ServerSocket ss;
        ServerThread st;
        try {
            ss = new ServerSocket(8011);
            while(true){
                System.out.println("服务已经开启");
                Socket socket = ss.accept();
                st = new ServerThread(socket);//创建线程对象
                ExecutorService es = Executors.newCachedThreadPool();
                es.execute(st); //开启线程
                es.shutdown();
                socket.close();//关闭socket
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

线程
ServerThread.java

 public class ServerThread implements Runnable{
    private Socket socket;
    //private ObjectOutputStream oos = new ObjectOutputStream();
    private FileOutputStream fos;
    private ObjectInputStream ois;
    public ServerThread(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream is = socket.getInputStream();
            ois = new ObjectInputStream(is);
            Object obj = ois.readObject();//读取网络中的对象

            System.out.println(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(ois!=null)
                    ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

错误如下:

 通过客户端向服务器写入对象
java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source)
    at java.io.ObjectOutputStream.flush(Unknown Source)
    at java.io.ObjectOutputStream.close(Unknown Source)
    at com.fan.client.Client.add(Client.java:21)
    at com.fan.bean.BaseStore.save(BaseStore.java:22)
    at com.fan.execute.StudentExecute.studentExecute(StudentExecute.java:32)
    at com.fan.execute.StuSelectionCourseSys.startview(StuSelectionCourseSys.java:32)
    at com.fan.test.Test.main(Test.java:11)

希望同志们能给予我解答,十分感谢!!!!

  • 写回答

3条回答

  • 搬运工666 2017-12-02 12:18
    关注

    在你的server这个类中 你主动关闭了socket 导致socket is colsed

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 怎么获取下面的: glove_word2id.json和 glove_numpy.npy 这两个文件
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug