1、socket连接分为tcp和udp两种模式,其中tcp会自动分发并且发送的流是顺序发送的,udp完整发送(主要用的是tcp模式,这边就不讨论upd模式的了)
2、tcp模式下连续发送数据时,会把一个大数据自动分为几个数据块多次发送,也有可能把多个小数据合并在一块后一次发送,所以传输的数据格式需要封装,加上一个数据长度或者结束标志以便区分,以下是在as3客户端接收socket数据时的片段代码
var flag:String = "[/e]";//结束标志
var aryData:Array = new Array();//这次接收到的数据组数
var strMessage:String = socket.readMultiByte(socket.bytesAvailable,"utf8");//本次接收到的数据
Debug.trace(strMessage);
var aryMessage:Array = strMessage.split(flag);
if (aryMessage.length == 1){
//没有结束标志则缓存后等待下一次接收数据
data += strMessage;
return;
}
else{
data += aryMessage[0];//添加上次还没接收完的数据
aryData.push(data);
for (var i:int = 1;i<aryMessage.length - 1;i++){
aryData.push(aryMessage[i]);//如果这次接收到的信息包含多条完整的数据,则添加进来
}
data = aryMessage[aryMessage.length -1];//缓存的数据变成剩余为接收完整的数据
}
//本次接收到多少完整的数据,遍历执行
for (var k:int = 0;k<aryData.length;k++){
var jsonObj:Object = JSON.decode(aryData[0].toString());
Debug.trace(jsonObj.cmd);
}