我制作了一个服务器和客户端Java应用程序。 它们应该通过带有线程的TCP套接字相互通信。 我使用InputStreamReader和BufferedReader来读取消息, 我使用OutputStreamWriter和BufferedWriter来编写消息。 BufferedReader的对象称为reader,BufferedWriter的对象称为writer。
在玩完之后,我意识到如果作者关闭,套接字会变得反应迟钝。
我在服务器端关闭了编写器,因为它永远不会发送任何消息,但只会从客户端读取消息。它不会抛出任何异常,而是卡在我调用任何与套接字相关的方法,例如reader.readline()和socket.setSoTimeout()。
问题很容易解决,因为我只是不关闭作家。但是,我很好奇为什么套接字无法通信。
答案 0 :(得分:1)
如果作者关闭,套接字会变得无法响应
如果编写器关闭,套接字将关闭。
我在服务器端关闭了编写器,因为它永远不会发送任何消息,
Non sequitur。如果您不需要Writer
,请不要构建它。
卡在我调用任何与套接字相关的方法的地方,例如
reader.readline()
和socket.setSoTimeout()
。
它不会“卡住”。它关闭了。当你调用其中任何一种方法时,你必须得到SocketException: socket closed
。你应该已经注意到了,你应该在你的问题中发布它。
答案 1 :(得分:-1)
你可以通过尝试阻止它变得反应迟钝:
if(reader.ready()){
String result = reader.readline();
}