EOFException в сети Java

это мой первый раз, когда я использую сеть Java. Я должен использовать его для проекта, над которым я работаю, который представляет собой простую карточную игру. Мой сервер и клиент будут общаться, поскольку «Получено соединение» будет напечатано. Но после этой строки возникает следующая ошибка:

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 ClientConnectionManager.reciveData(ClientConnectionManager.java:49)
at LogicThread.getHandSize(GameLogic.java:22)
at LogicThread.run(GameLogic.java:16)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-4" java.lang.NullPointerException
at LogicThread.getHandSize(GameLogic.java:22)
at LogicThread.run(GameLogic.java:16)
at java.lang.Thread.run(Unknown Source)

рассматриваемые классы:

static ObjectInputStream input;
static ObjectOutputStream output;
static Socket socket;

    public static void connectToServer(){
    try {
        System.out.println("connecting");
        socket = new Socket(ip, port);
        input = new ObjectInputStream(socket.getInputStream());
        output = new ObjectOutputStream(socket.getOutputStream());
        output.flush();
        System.out.println("connected");
        reciveData();
        logic.startLogic();
        //listenForData();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static Object reciveData(){
    try {
        Object obj = input.readObject(); - Error is on this line
        System.out.println(obj);
        return obj;
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }
    return null;
}

Код сервера для отправки данных:

    ServerSocket server;
    server = new ServerSocket(2302);
    Socket connection;
    connection = server.accept();
    output = new ObjectOutputStream(connection.getOutputStream());

    public void sendData(Object data){
    try {
        output.writeObject(data);
        output.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Я не уверен, что вызывает это, потому что сервер отправляет «Получено соединение», которое клиент получает без проблем и распечатывает. Но любой вызов извне метода connectToServer() вызывает указанную выше ошибку.


person Sean Powell    schedule 10.02.2016    source источник
comment
Нам также нужно увидеть код на стороне сервера.   -  person user207421    schedule 10.02.2016
comment
@EJP да забыл, просто добавил   -  person Sean Powell    schedule 10.02.2016
comment
EOFException - это исключение конца файла. Вы закончили чтение всего в потоке и попытались прочитать его снова.   -  person Andrew Williamson    schedule 10.02.2016
comment
Где вызывается sendData()?   -  person kgautron    schedule 10.02.2016
comment
@KayKay вызывается в другом классе и отправляет строку клиенту   -  person Sean Powell    schedule 10.02.2016
comment
@EPJ хорошо, спасибо, я постараюсь найти, где это происходит   -  person Sean Powell    schedule 10.02.2016
comment
Вызывается ли он до того, как клиент вызовет receiveData() ?   -  person kgautron    schedule 10.02.2016
comment
@KayKay да, он вызывается перед получением данных   -  person Sean Powell    schedule 10.02.2016


Ответы (1)


Партнер закрыл соединение. Где-то сервер закрывает принятый сокет или один из его потоков.

Это означает, что если сервер действительно вызвал sendData(), он должен был сгенерировать исключение, о котором вы не упомянули.

person user207421    schedule 10.02.2016
comment
я обнаружил ошибку, когда один из классов закрывал соединение - person Sean Powell; 10.02.2016