EOFException при попытке передать объект через сокеты - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь передать объект через сокеты с сервера на клиент, что происходит в том случае, если на некоторых компьютерах он работает хорошо, а на других - нет. Объект обновляется бесконечно, поэтому, очевидно, я использую бесконечный цикл для отправки объекта на неопределенный срок. При попытке выполнить клиент отправляет следующую ошибку:

java -jar PC-CheckClient.jar 192.168.1.71 -console
Successfully established connection with server PC-CHECK
Starting... It may take several seconds
jul 11, 2019 1:34:31 AM com.he.pc.view.Main <init>
GRAVE: null 
java.io.EOFException 
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at com.he.pc.view.Main.<init>(Main.java:39)
    at com.he.pc.view.Main.main(Main.java:93)

Это код зонда команды объекта с сервера

private void sendData() {
        //Declarar, instanciar e inicializar
        ObjectOutputStream oos = null;
        ServerSocket serverSocket = null;
        Socket socket = null;
        try {
            //Puerto 5000
            int puerto = 5000;
            serverSocket = new ServerSocket(puerto);
            System.out.println("Establishing connection with the PC-CHECK client");
            socket = serverSocket.accept();
            System.out.println("Successfully established connection");
            System.out.println("Starting... It may take several seconds");
            oos = new ObjectOutputStream(socket.getOutputStream());
            while (true) {
                //Obtencion del hardware
                this.cpuMain = this.loadCPU();
                this.ram = this.loadRAM();
                //Envio de datos al pc cliente
                oos.writeObject(this.cpuMain);
                oos.writeObject(this.ram);
            }
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                if(oos != null){
                    oos.close();
                }
                if(socket != null){
                    socket.close();
                }
                if(serverSocket != null){
                    serverSocket.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

И вот клиент получает его

public Main(String ip) {

        try {
            socket = new Socket(ip, 5000);
            System.out.println("Successfully established connection with server PC-CHECK");
            System.out.println("Starting... It may take several seconds");
            ois = new ObjectInputStream(socket.getInputStream());
            while(true){
                this.cpu = (CPU)ois.readObject();
                Utilities.clear();
                System.out.println("CPU: ");
                System.out.println(cpu.toString());

                this.ram = (RAM) ois.readObject();
                System.out.println("RAM: ");
                System.out.println(this.ram.toString());
            }
        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }catch (Exception e){

        }finally {
            try {
                if (socket != null) {
                    socket.close();
                }
                if (ois != null) {
                    ois.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

У меня вопрос, как я могу решить эту ошибку и убедиться, что все компьютеры работают нормально?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...