Создание 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
Нет, ты не