您的位置:首页 > 其它

关于socket的接收堵塞问题

2013-09-30 13:15 162 查看
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();那么关联这个writer的socke也会关闭,所以流的关闭应在收发都结束之后再关闭。
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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: