Создание ObjectInputStream из Socket, генерирующего EOFException - PullRequest
0 голосов
/ 10 мая 2018

Попробую попросту.

Конструктор класса 'B' получает сокет в качестве параметра, он исходит из класса 'A'. В A сокет используется для ввода-вывода с использованием DataInputStream и DataOutputStream. Ни сокет, ни потоки не были закрыты A.

Затем в B я пытаюсь создать ObjectInputStream из того же сокета, но я получаю нулевую ссылку в OIS, и выдается исключение EOFException. Я понятия не имею, почему это происходит. Может быть, я не могу использовать сокет с другими видами потоков.

Я прочитал много связанных вопросов, но ни у кого нет розеток. Ниже немного кода.

public HiloLoginHandler(Socket _socket) { // this is class 'A'
    socket = _socket;
        bytesOut = new DataOutputStream(socket.getOutputStream());
        bytesIn = new DataInputStream(socket.getInputStream());

}

public ClientInputHandler(Socket _socket) { // This is Class 'B'
        socket = _socket;

        InputStream is= socket.getInputStream();    
        ObjectInputStream in= new ObjectInputStream(is); // EOFException here
} 

1 Ответ

0 голосов
/ 11 мая 2018

Примите решение. Использование DataOutputStream на одном конце и ObjectInputStream на другом конце никогда не сработает. Вы должны использовать дополнительные потоки.

В этом случае используйте DataInputStream вместо ObjectInputStream, поскольку очевидно, что никакие объекты никогда не будут отправлены.

Почему вы открываете поток ввода, когда узел уже закрыл соединение, - еще одна загадка. Если пэр никогда ничего не посылает, зачем беспокоиться?

Я получаю нулевую ссылку в OIS

Нет, не вы.

...