关于socket的接收堵塞问题

来源:互联网 发布:贵金白银实时数据接口 编辑:程序博客网 时间:2024/06/11 05:41

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循环

StringBufferstrbuf=new StringBuffer();     Stringline=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");     }


原创粉丝点击