Создание ObjectInputStream из Socket, генерирующего EOFException

Я постараюсь выразиться проще.

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

Затем в 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 ответ

Решение

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

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

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

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

Нет, ты не

Другие вопросы по тегам