在网络通讯中,消息粘包是个很常见的问题。文章将讲解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
本文介绍了解决Erlang与ActionScript(AS)通讯时遇到的消息粘包问题的方法。通过在消息前添加长度标识,确保数据能够正确解析。Erlang端可通过设置socket属性自动完成这一过程,而AS端则需手动实现消息长度的添加与读取。
493

被折叠的 条评论
为什么被折叠?



