Java 关闭套接字的inputstream是否也会关闭套接字连接?
在JavaAPI中Java 关闭套接字的inputstream是否也会关闭套接字连接?,java,api,sockets,Java,Api,Sockets,在JavaAPI中 Socket socket = serverSocket.accept(); BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter toSocket = new PrintWriter(socket.getOutputStream()); //do sth with fromSocket ... and close
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();
在上面的代码中,在我关闭了来自socket的InputStream之后,socket连接似乎不再可用——客户端将不会收到“IsSocket connection still available”消息。
这是否意味着关闭套接字的输入流也会关闭套接字本身?是的,关闭输入流会关闭套接字。您需要在套接字上使用shutdownInput方法,以便: 然后,仍然可以发送到输出套接字
//then write to socket again
toSocket.print("is socket connection still available?\r\n");
//close socket
socket.close();
不,它不会在服务器端引发任何异常。toSocket outputstream obj似乎仍然在服务器端工作,但在客户端连接是关闭的。不,它执行单向关闭,关闭套接字的输入端(这样您就无法接收更多数据),但仍然允许您在输出端发送消息,我想这正是您所要求的。当您最终对套接字调用close()时,输出端也会关闭。是的,关闭输入流会关闭套接字。输出流同上。当然,你应该关闭的始终是输出流,所以它会被刷新。我正在寻找一种方法,在不关闭套接字的情况下关闭输出流,它成功了!谢谢你,伙计!你结束了一个没完没了的任务…我在找同样的@Gregordy,但要找的是
BluetoothSocket
。它没有方法shutdownInput()
。你知道吗?
//then write to socket again
toSocket.print("is socket connection still available?\r\n");
//close socket
socket.close();