我做了一个服务器和客户端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();
}