在网络通讯中,消息粘包是个很常见的问题。文章将讲解Erlang与As通讯时如何解决消息粘包问题。
解决方法是在消息内容前加消息长度,所以发送的数据为 len + body。
erlang端很好解决,只需修改socket {packet, N}属性,当N为1、2、4时,erlang会自动给消息加上包头。
AS端的做法在发送消息前先转成bytes,再计算内容长度;接收数据时先获取包头,再获取后面的数据。
AS端发送数据:
var bytes:ByteArray = new ByteArray;
bytes.writeUTFBytes(data);
socket.writeShort(bytes.length);
socket.writeBytes(bytes);
socket.flush();
AS接收数据:
var len : int = socket.readShort();
var bytes : ByteArray = new ByteArray;
socket.readBytes(bytes, 0, len);
var data : String = bytes.readUTFBytes(bytes.length);
参考地址:
http://blog.csdn.net/mycwq/article/details/22821223