EOFExeption при чтении собственного объекта с сервера - PullRequest
0 голосов
/ 24 мая 2019

Я установил соединение через сокеты между двумя компьютерами.Я создал собственный объект с именем «Результат» и могу успешно перенести его на компьютер-сервер с клиентского компьютера.

Если я выполняю подключение через сокет только на своем компьютере, я могу также получить объект с серверного компьютера.

Проблема заключается в том, что я пытаюсь получить объект с серверного компьютера.Я получаю сообщения об ошибках, и у меня возникает ощущение, что с отправляемым объектом что-то происходит.Если я открываю сохраненный (сериализуемый) объект 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 на сервере.

1 Ответ

0 голосов
/ 24 мая 2019

всякий раз, когда ты пишешь что-нибудь.не забудьте промыть, а затем закрыть.Надежда может помочь.

...