Закрытие сокета и закрытие Inputstream - PullRequest
2 голосов
/ 11 января 2012

Класс c расширяет поток

static Queue<Socket> socketQueue
Make connection to another server or client
And then add socket to socketqueue

Класс расширяет поток

method a
bufferedinputstream bis = socketQueue.poll
Do work
Make bis null without closing it<br>

Класс В расширяет поток

Method b
Bufferedinputstream bis = socketqueue.poll
Do work
Make bis null without closing it

Я сделал поток буферизованного ввода нулевым, поскольку не хочу закрывать подключенный сокет. В нескольких сообщениях говорилось, что закрытие потока ввода-вывода также закроет сокет. Всякий раз, когда я использую поток ввода / вывода с сокетом, я обычно закрываю поток и сокет, если он не равен нулю.

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

Я попробовал socket.shutdowninput и output, однако это выдает исключение, когда я создаю другой поток ввода / вывода с сокетом.

Есть ли что-то, что я неправильно понял или отсутствует в этой точке?

1 Ответ

8 голосов
/ 11 января 2012

Соединение через сокет имеет только один InputStream и один OutputStream. Как только вы закроете какой-либо из них (или сам Socket), соединение автоматически закроется. Вам нужно где-то хранить нужные вам потоки и использовать их, вы не можете получать их с одного и того же Socket каждый раз, когда они вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...