BufferReader与BufferWriter实现socket通信注意事项

2022-03-28 13:31:42 浏览数 (1)

java中可以使用BufferedReader 与BufferedWriter来辅助完成socket通信功能,但是使用中需要注意下面这个坑:

代码语言:javascript复制
   BufferedReader   bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
    //用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法  
 BufferedWriter  bufWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    int nMsgLen = 0;
    String sMsgBody="";
    String str = StringUtils.strip(bufReader.readLine());  
  

bufReader.close();-----位置不对,这步调用将导致socket关闭,导致下面的bufWriter.write调用抛出异常

代码语言:javascript复制
(java.net.SocketException: Socket closed)
       System.out.println("Client Socket Message:" str);  
       bufWriter.write("Message Received" str);  
       bufWriter.flush();   
       bufWriter.close();  
        socket.close();
  
       socket=null;

正确的使用方法:在完成所有write以及read后再分别调用BufferedReader类以及BufferedWriter类的close方法。

0 人点赞