使用socket方式与flash通讯,
简单字串协议,每行一个数据。如:
xxxx\nxxxx\nxxxx\n
当然,xxxx是个json数据也挺好,扩展数据维度。解析就不用费劲了。
socke流式传输数据会有 x\nxxx的情况出现,粘包问题也是必须处理的。
像java,c#,python客户端程序一般会考虑到readline方法,然后解析json。但as3的socket接收方式,并没有readline方法。
拈来两句昔日曾经辉煌的 action script,
出个思路,实现readline功能同时能解决粘包问题,简单造个轮子吧
var socket_times:int = 0;
var last_str:String = "";
function onSocketData(event:ProgressEvent):void
{
var bytes:ByteArray = new ByteArray();
while (socket.bytesAvailable)
{
socket.readBytes(bytes, 0, socket.bytesAvailable);
}
try
{
//trace("onSocketData" + bytes.length)
//模拟readline的功能
var _str:String = bytes.toString()
//注意这里会有粘包情况,几个包在一起,需要解析
var _datalist:Array = _str.split("\n");
_datalist[0] = last_str + _datalist[0];//接上不完整的包
last_str = _datalist.pop();//弹出不完整的包
if (_datalist.length ){
//存在完整包
//取最后一个数据来用。
var _lastdata = _datalist[_datalist.length - 1];
try{
socket_times++;
var _obj:Object=JSON.parse(_lastdata);
log(socket_times+" : "+bytes.length+" , "+_obj.t+" , "+_obj.d)
}catch(e){
//非json包
log(socket_times+" : "+_lastdata);
}
}
}
catch (event:Error)
{
log(socket_times+" : "+event);
//not string data
}
}