关于socket的接收堵塞问题

1.      socket通信中服务器和客户端需要互相收发数据,而readLine()这个函数,如果接收到数据没有换行标志,就会一直堵塞在那

writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(

              socket.getOutputStream())), true);

       writer.print(Msg);

    writer.flush();

因为writer.print()writer.println()少了换行符,客户端永远收不到一行结束的标志

 

BufferdWriter时也会出现同样问题

writer = new BufferedWriter(new OutputStreamWriter(

              socket.getOutputStream()));

       writer.write(msg);

    writer.flush();

需要加一行writer.newLine();write(msg)之前

2.    在关闭流的时候,会把socket也关闭

比如上面,如果我在flush之后加上writer.close();那么关联这个writersocke也会关闭,所以流的关闭应在收发都结束之后再关闭。

3.    如果只是接收一行数据

reader = new BufferedReader(new InputStreamReader(

              socket.getInputStream()));

       String msg = reader.readLine();

    return msg;

就像上面这样写

如果想接收多行数据,就要用while循环

StringBuffer strbuf=new StringBuffer();

      String line=null;

      while((line=reader.readLine())!=null){

           strbuf.append(line+"\n");

       }

 

return strbuf.toString();

  如果像上面这么写,会堵塞

   应该加一个标志符,可以跳出while循环,客户端在发送的数据后加一个end

while((line=reader.readLine())!=null){

         if(line.equalsIgnoreCase("end")){

            break;

         }

         strbuf.append(line+"\n");

      }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值