Закрывает ли входной поток сокета также соединение сокета? - PullRequest
24 голосов
/ 18 октября 2010

В Java API,


Socket socket = serverSocket.accept();
BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter toSocket = new PrintWriter(socket.getOutputStream());
//do sth with fromSocket ... and close it
fromSocket.close();
//then write to socket again
toSocket.print("is socket connection still available?\r\n");
//close socket
socket.close();

В приведенном выше коде после закрытия InputStream fromSocket кажется, что соединение с сокетом больше не доступно - клиент не получит сообщение «соединение с сокетом все еще доступно». Означает ли это, что закрытие входного потока сокета также закрывает сам сокет?

1 Ответ

36 голосов
/ 18 октября 2010

Да, закрытие входного потока закрывает сокет.Вам необходимо использовать метод shutdownInput для сокета, чтобы закрыть только входной поток :

//do sth with fromSocket ... and close it 
socket.shutdownInput(); 

Затем вы все равно можете отправить в выходной сокет

//then write to socket again 
toSocket.print("is socket connection still available?\r\n"); 
//close socket 
socket.close(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...