日期:2014-05-18  浏览次数:20829 次

请问如何多线程处理客户端发送的SOCKET
情况是这样的:我现在用多线程处理客户端发送来的请求,得到的socket字符串,但是这个字符串是连续的,比如应该的长度为111,但是我接受到的可能是多个组成的111222333444,也就是说并不是一个SOCKET发送的,但是我是要一个个解析这些字段的比如解析111或者222,而且SOCKET服务端一直在接受字段客户端不停止发送我就没法处理这个字符串啊???求高手指点

------解决方案--------------------
StringBuilder buf = new StringBuilder();
while(true){
String lines;
while ((lines = b.readLine()) != null){ //你的数据没有接收完毕,你想怎么处呢?
// lines = new String(lines.getBytes(), "utf-8");
// lines = new String(lines.getBytes(), "gb2312");
// lines1+=lines;
  
System.out.println(lines);
buf.append(lines); //把接收的数据保存到一个缓存,直到数据接收完毕
}
String data = buf.toString(); //然后再对接收完毕的数据进行处理

题外话,用readLine容易造成数据堵塞,你应该定义好自己的通信协议,用字节的方式接收数据,数据带有头信息,头信息带有数据长度,先从socket获取头信息,然后解析得到数据长度,再根据数据长度去循环取信息,这样才能保证你的数据的完整性,否则因为socket本身的堵塞,你没法知道所接收的数据是否完整。