一旦bufferedwriter在java套接字编程中关闭就无法通信

时间:2016-06-02 00:55:31

标签: java sockets tcp bufferedreader bufferedwriter

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

在玩完之后,我意识到如果作者关闭,套接字会变得反应迟钝。

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

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

2 个答案:

答案 0 :(得分:1)

  

如果作者关闭,套接字会变得无法响应

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

  

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

Non sequitur。如果您不需要Writer,请不要构建它。

  

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

它不会“卡住”。它关闭了。当你调用其中任何一种方法时,你必须得到SocketException: socket closed。你应该已经注意到了,你应该在你的问题中发布它。

答案 1 :(得分:-1)

你可以通过尝试阻止它变得反应迟钝:

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