Закрывает ли входной разъем гнезда и закрывает соединение сокета?
В 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".
Означает ли это, что закрытие входного потока сокета также закрывает сам сокет?
Ответы
Ответ 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();