首页 > 解决方案 > 从服务器读取自己的对象时出现 EOFExeption

问题描述

我已经通过两台计算机之间的套接字建立了连接。我创建了一个名为“Result”的自己的对象,我可以成功地将它从客户端计算机传输到服务器计算机。

如果我只在我的计算机上进行此套接字连接,那么我也可以从服务器计算机接收一个对象。

问题是当我尝试从服务器计算机接收对象时。我收到错误消息,并且感觉正在发送的对象发生了某些事情。如果我在记事本中打开自己计算机上保存的(可序列化)结果对象,那么我会得到很多随机符号,但是当我在服务器计算机上执行相同操作时,它只有两个符号。

这是我的代码,我正在使用 JFileChooser,因此我可以轻松访问要从服务器发送的对象,可以理解的是,我可以访问两台计算机。

发送服务器的代码

public static void serverSendObject() throws IOException, ClassNotFoundException {

       ServerSocket serverSocket = null;

         try {

             serverSocket = new ServerSocket(2001,10);

         } 

         catch (IOException ex) {

             System.out.println("Can't setup server on this port 
                   number. ");
         }

         Socket socket = null;
         OutputStream out = null;
         ObjectOutputStream objOut = null;

         try {

             socket = serverSocket.accept();
         }

         catch (IOException ex) {

             System.out.println("Can't accept client connection. ");
         }

         try {

             out = socket.getOutputStream();
         } 

         catch (IOException ex) {

             System.out.println("Can't get socket input stream. ");
         }

         try {

             objOut = new ObjectOutputStream(out);
         } 

         catch (FileNotFoundException ex) {

             System.out.println("File not found. ");
         }

         JFileChooser fc = new JFileChooser();

         int reValue=fc.showOpenDialog(null);

         if(reValue == JFileChooser.APPROVE_OPTION) {



             try(ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fc.getSelectedFile()))) {

                    objOut.writeObject(objInput.readObject());


             }

            catch(IOException e) {

            }
            catch(ClassNotFoundException e) {

            }

         }

         serverSocket.close();
         socket.close();

   }

接收客户端的代码

public void loadExternal() throws IOException, ClassNotFoundException {

        Visualizer vis = new Visualizer();
        currentVis=vis;


        Socket socket = null;
        String host= *insert IP address*

        socket= new Socket(host, 2001);

        InputStream in = socket.getInputStream();

        ObjectInputStream objIn = new ObjectInputStream (in);

        currentRes = (Result) objIn.readObject();




        objIn.close();
        socket.close();
}

我不断得到

java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)

作为一个错误。我试图抓住这一点,但它没有帮助。我尝试了一些不同的方法,但似乎没有任何效果。

只是想指出,当我连接我自己的计算机上的套接字时,完全相同的代码可以工作,并且当我连接两台不同的计算机并且我能够将对象发送到服务器计算机时会出现这个问题。

编辑:我想我可以确认我发送的对象发生了什么事。本地(通过套接字)保存的对象是 1131 个字节,而我发送到服务器计算机的对象只有 4 个字节。

我在发送对象时使用相同的技术,在客户端使用 ObjectOutputStream,在服务器使用 ObjectInputStream。

标签: javasocketsobjecteofexception

解决方案


每当你写任何东西。记得冲洗然后关闭。希望能有所帮助。


推荐阅读