`
pumbaa.he
  • 浏览: 71404 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

初学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);
			}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics