Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关闭套接字的inputstream是否也会关闭套接字连接?_Java_Api_Sockets - Fatal编程技术网

Java 关闭套接字的inputstream是否也会关闭套接字连接?

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

在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 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();