在 java 套接字编程中关闭 bufferedwriter 后无法通信

Cannot communicate once bufferedwriter is close in java socket programming

我制作了服务器和客户端 Java 应用程序。 它们应该通过带有线程的 TCP 套接字相互通信。 我使用 InputStreamReader 和 BufferedReader 来读取消息, 我使用 OutputStreamWriter 和 BufferedWriter 来写消息。 BufferedReader的对象叫做reader,BufferedWriter的对象叫做writer

在尝试之后,我意识到如果 writer 关闭,套接字将变得无响应。

我关闭了服务器端的编写器,因为它永远不会发送任何消息,而只会从客户端读取消息。它不会抛出任何异常,但会卡在我调用任何与套接字相关的方法的地方,例如 reader.readline() 和 socket.setSoTimeout().

这个问题很容易解决,因为我只是不关闭作者。但是,我很好奇为什么socket无法通信。

the socket becomes irresponsive if the writer is closed

如果 writer 关闭,套接字变为 关闭

I closed the writer on server side because it will never send any message,

不符合逻辑。如果您不需要 Writer,请不要构造它。

stuck where I called any methods relate to socket such as reader.readline() and socket.setSoTimeout().

不是 'stuck'。它关闭了。当您调用这些方法中的任何一个时,您一定得到了 SocketException: socket closed。您应该已经注意到这一点,并且您应该将其张贴在您的问题中。

您可以通过尝试阻止它无响应:

if(reader.ready()){
String result = reader.readline();
}