初学socket经验(一)
初学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); }