ObjectInputStream генерирует EOFException после многократного использования readUTF () - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь реализовать связь с клиентом на сервере и хочу, чтобы соединение toe было открыто до тех пор, пока клиент не завершит его, поэтому оно работает в al oop. Первая итерация работает нормально, однако при втором запуске l oop client.getOis().readUTF(); выдает исключение.

Это серверный код:

  try {
        client.setOis(new ObjectInputStream(client.getSocket().getInputStream()));
        client.setOos(new ObjectOutputStream(client.getSocket().getOutputStream())); 

        while (active) {
            String client_msg = client.getOis().readUTF();
            String action = client_msg.split(";")[0];
            String leftover = client_msg.split(";")[1];

            switch (action) {
                case "LOGIN": login(action, leftover);break;
                case "SEND": send(leftover);break;
                case "DISCONNECT": update(action);break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

Клиент просто отправляет простую строку "LOGIN;username", которую обрабатывает метод входа.

Это исключение:

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.ObjectInputStream$BlockDataInputStream.readUnsignedShort(ObjectInputStream.java:3170)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:3226)
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1133)
at gruber.middleware.ClientHandler.run(ClientHandler.java:26)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

1 Ответ

0 голосов
/ 17 января 2020

Проблема заключалась в том, что я открыл Socket и Streams в попытке с ресурсами, что означало, что они были закрыты автоматически.

...