初学socket心得(一)
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);}
?