浏览 5153 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-03
学erlang有一段时间了,现在在维护一套webim系统 在没有使用包协议的时候,遇到好多粘包问题,实在恼火 查阅了相关资料: Flash Socket 的 writeUTF() 会自动增加包头长度的协议,刚好对应了
下面是我写的一个Flash Socket 接口:SocketBridge.as
package { import flash.display.Sprite; import flash.events.*; import flash.net.Socket; import flash.utils.*; import flash.external.ExternalInterface; import flash.system.*; public class SocketBridge extends Sprite { Socket.prototype.timeout =3000; private var socket:Socket; public function SocketBridge() { socket = new Socket(); socket.addEventListener( Event.CONNECT, onConnect ); socket.addEventListener( ProgressEvent.SOCKET_DATA, onDataRecevice); socket.addEventListener( Event.CLOSE, onClose); socket.addEventListener( IOErrorEvent.IO_ERROR, onError); if(ExternalInterface.available) { ExternalInterface.addCallback("socket_connect",socket_connect); ExternalInterface.addCallback("socket_send",socket_send); ExternalInterface.addCallback("load_policy",load_policy); } } public function onError(e):void { ExternalInterface.call("sb_onerror",e.text); socket.close(); } public function load_policy(host:String,port):void { Security.loadPolicyFile("xmlsocket://"+host+":"+port); } public function socket_connect(host:String,port):void { try{ socket.connect(host,port); }catch(e){ ExternalInterface.call("sb_onerror",e.text); } } public function socket_send(msg:String) { socket.writeUTF(msg); socket.flush(); } private function onConnect(event:Event):void { ExternalInterface.call("sb_onconnect",true); } private function onClose(event:Event):void { socket.close(); ExternalInterface.call("sb_onclose",true); } private function onDataRecevice( eventrogressEvent ):void { var sdata:String; while(socket.bytesAvailable){ sdata = socket.readUTF(); ExternalInterface.call("sb_ondata",sdata); } } } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-05
底层的粘包效率高 这种事情能不自己做就不自己做
|
|
返回顶楼 | |