在 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();
}
我制作了服务器和客户端 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()
andsocket.setSoTimeout()
.
不是 'stuck'。它关闭了。当您调用这些方法中的任何一个时,您一定得到了 SocketException: socket closed
。您应该已经注意到这一点,并且您应该将其张贴在您的问题中。
您可以通过尝试阻止它无响应:
if(reader.ready()){
String result = reader.readline();
}