一旦缓冲编写器在 java 套接字编程中关闭,就无法通信



我做了一个服务器和客户端Java应用程序。它们应该通过 TCP 套接字与线程相互通信。我使用InputStreamReader和BufferedReader来读取消息,我使用 OutputStreamWriter 和 BufferedWriter 来编写消息。BufferedReader 的对象称为 reader,BufferedWriter 的对象称为编写器。

在尝试了一下之后,我意识到如果编写器关闭,套接字将变得无响应。

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

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

如果编写器关闭,套接字将变得无响应

如果编写器关闭,套接字将关闭

我在服务器端关闭了编写器,因为它永远不会发送任何消息,

不合时宜。如果你不需要Writer,就不要构造它。

卡在我调用与套接字相关的任何方法的地方,例如 reader.readline()socket.setSoTimeout().

它没有"卡住"。它已关闭。调用这些方法中的任何一个时,您一定已经SocketException: socket closed。你应该已经注意到了这一点,你应该把它贴在你的问题中。

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

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

最新更新