Подтвердить что ты не робот

Закрывает ли входной разъем гнезда и закрывает соединение сокета?

В 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 кажется, что соединение сокета больше не доступно - клиент не получит сообщение "is socket connection still available". Означает ли это, что закрытие входного потока сокета также закрывает сам сокет?

4b9b3361

Ответ 1

Да, закрытие входного потока закрывает сокет. Вам нужно использовать метод 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();