- 浏览: 577898 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wzh051527:
我是大四实习生一个,自我感觉技术能力在第三年。。唯一不明白,为 ...
十年技术,不要再迷茫 -
room_bb:
.hrl文件怎么加入到编译规则里面?比如:pp.hrl文件-d ...
Erlang中用的makefile的一点解释 -
吉米家:
感觉帆软报表的flash打印就很不错哇,特别好用
JSP 实现报表打印 -
雪碧爱芬达:
苦逼程序员的辛酸反省与总结 -
mlyjxx:
...
十年技术,不要再迷茫
package gamePub.clientSocket { import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.net.Socket; import flash.text.TextField; import flash.text.TextFormat; import flash.utils.ByteArray; import gamePub.ui.GPopInfo; import gsocket.GlobalManagement; public class ClientSocket extends Socket { public function ClientSocket(host:String=null, port:int=0) { super(host, port); addEventListener(Event.CONNECT, connectHandler); addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); addEventListener(Event.CLOSE,onServerClosed); addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); } private var _readyToSend:Boolean = false; public function get readyToSend():Boolean { return _readyToSend; } private var _readyToClose:Boolean = false; public function get readyToClose():Boolean { return _readyToClose; } private var _readyToConnect:Boolean = true; public function get readyToConnect():Boolean { return _readyToConnect; } //成功建立和服务端得连接后 private function connectHandler(event:Event):void { _readyToConnect = false; _readyToSend = _readyToClose= true; trace("connectHandler"); } public var readyToRecv:Boolean = false; //可以接受数据 //成功接收到从服务端传来的一次数据 private function socketDataHandler(event:ProgressEvent):void { //trace("ClientSocket socketDataHandler"); readyToRecv = true; var recvStream:ByteArray = new ByteArray(); readBytes(recvStream,0,bytesAvailable); GlobalManagement.instance.recvMessageFromServer(recvStream); } //关闭套接字 public function closeClientSocket():void { if(this && connected) { removeEventListener(Event.CONNECT, connectHandler); removeEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); removeEventListener(Event.CLOSE,onServerClosed); removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); close(); } _readyToConnect = true; _readyToSend = _readyToClose = false; } //服务端关闭后 private function onServerClosed(event:Event):void { trace("onServerClosed"); closeClientSocket(); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler"); closeClientSocket(); } private function securityErrorHandler(event:SecurityErrorEvent):void { closeClientSocket(); trace("security错误"); } } }
package gamePub.clientSocket { import pub.net.NetCenter; import flash.utils.ByteArray; import flash.utils.Endian; public class NetManagement { private static var _instance:NetManagement; public static function get instance():NetManagement { if(!_instance) { _instance = new NetManagement(); } return _instance; } private var _partData:ByteArray = new ByteArray(); //过长或者过短的数据包 _partData private var _packageQueue:Array = []; //数据包队列 存放ByteArray类型的元素 //填充需要处理的消息队列_packageQueue 参数value是服务器发送过来的字节流 private function fillMsgQueue(value:ByteArray):void { _partData.position = _partData.length; _partData.writeBytes(value); //value追加到_partData末尾 //处理_partData,使得_partData中没有数据包或者只有一个过短的数据包 var otherPack:PackageHead = new PackageHead(); otherPack.byteArray = _partData; //无包头 if(!otherPack.legal) { ////trace("断包 无包头"); _partData = new ByteArray(); } while(otherPack.legal) { if(otherPack.bodyLen < otherPack.body.length) { var pack2:ByteArray = new ByteArray(); pack2.writeBytes(_partData,0,otherPack.bodyLen+6); _packageQueue.push(pack2); //trace("连包"); // var pck:PackageHead = new PackageHead(); // pck.byteArray = pack2; // //trace("fillMsgQueue len cmd",pck.toByteArray().length,pck.cmd.toString(16)); var pack3:ByteArray = new ByteArray(); pack3.writeBytes(_partData,pack2.length); _partData = pack3; otherPack.byteArray = _partData; } else if(otherPack.bodyLen == otherPack.body.length) { _packageQueue.push(otherPack.toByteArray()); // //trace("fillMsgQueue len cmd",otherPack.toByteArray().length,otherPack.cmd.toString(16)); _partData = new ByteArray(); //清空_partData break; } else { //trace("断包 有包头"); break; } } } //服务器发信息到客户端,有可能去改变可视元素的关联数据 public function recvMessageFromServer(value:ByteArray):void { fillMsgQueue(value); while(_packageQueue.length > 0) { var pack:ByteArray = _packageQueue.shift(); processServerMsg(pack); } } //处理服务器发过来的正确数据包,value是长度正确的一个数据包 private function processServerMsg(value:ByteArray):void { var pack:PackageHead = new PackageHead(); pack.byteArray = value; //trace("processServerMsg pack len,command",pack.toByteArray().length,pack.cmd); var cmd:uint; //命令字 cmd = pack.cmd; //trace("pack cmd",cmd.toString(16)); pack.body.endian = Endian.LITTLE_ENDIAN; pack.body.position = 0; //判断数据完整 NetCenter.onReceivedMessage(cmd,pack.body); //分发消息 } /* public function useItemUpLevel(page:int,grid:int,id:Array):void { var body:ByteArray = new ByteArray(); body.endian = Endian.LITTLE_ENDIAN; body.writeByte(page) body.writeByte(grid) body.writeInt(id[0]) body.writeInt(id[1]) var pack:PackageHead = new PackageHead(body); pack.cmd = CommandEnum.CLGM_USEITEM_UPLEVEL_SHOP pack.sendMsg() }*/ } }
package gamePub.clientSocket { import pub.net.NetCenter; import flash.utils.ByteArray; import flash.utils.Endian; public class PackageHead { private const HEAD_FLAG:uint = 0xFFAA; private var _headFlag:uint; //标志位 unsigned short 用于辨别数据包的真伪 public static const MAX_SIZE:uint = 119; public var cmd:uint = CommandEnum.CLGM_CHAT; //命令字 用于区分数据包的类型,邮件包还是聊天包? private var _body:ByteArray; //和消息包头关联的消息包体 private var _legal:Boolean = true; //数据是否合法,默认合法 private var _bodyLen:uint; public function PackageHead(msg:ByteArray=null) { _headFlag = HEAD_FLAG; _body = msg; } public function get body():ByteArray { return _body; } public function get legal():Boolean { return _legal; } public function get bodyLen():uint { return _bodyLen; } public function set byteArray(value:ByteArray):void { if(value) { value.position = 0; value.endian = Endian.LITTLE_ENDIAN; _headFlag = value.readUnsignedShort(); if(_headFlag != HEAD_FLAG) { _legal = false; return ; } cmd = value.readUnsignedShort(); _bodyLen = value.readUnsignedShort(); _body = new ByteArray(); _body.writeBytes(value,6,value.length-6); } } public function toByteArray():ByteArray //把packageHead转换为对应的ByteArray { var byteStream:ByteArray = new ByteArray(); byteStream.endian = Endian.LITTLE_ENDIAN; byteStream.writeShort(HEAD_FLAG); byteStream.writeShort(cmd); if(_body) { byteStream.writeShort(_body.length); byteStream.writeBytes(_body); } else { byteStream.writeShort(0); } return byteStream; } //发送消息包给服务器 发送成功返回true public function sendMsg():Boolean { if(NetCenter.m_clientSocket && NetCenter.m_clientSocket.connected) { NetCenter.m_clientSocket.writeBytes(toByteArray(),0,toByteArray().length); NetCenter.m_clientSocket.flush(); // trace("sendMsg:true"); return true; } // trace("sendMsg:false"); return false; } } }
发表评论
-
as3 Loader 加载资源后内存泄露无法释放的问题。
2014-06-21 10:30 640as3 Loader 加载资源后内存泄露无法释放的问题。 ... -
as3判断flash player版本的函数
2014-06-10 20:35 799//判断当前版本是否高于9.0.115.0为例子. pr ... -
CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
2014-04-03 15:25 966华文细黑:STHeiti Light [STXihei]华文 ... -
as3.0的垃圾回收机制
2013-09-07 14:02 1464还是同样的博客,还是同样的作者(Daniel Sidhio ... -
AIR程序多开
2013-09-07 13:55 968AIR应用通常不能像QQ那样能进行多开操作。为了让一个用AI ... -
starling性能优化总结
2013-07-22 14:06 1441在项目开发的过程中总结了一下starling的性能优化方案: ... -
AS3 Socket从零开始
2013-07-22 12:54 1071大家如果想学AS3 Socket直接在百度里搜一下,会找到很 ... -
绕开AS3安全沙箱 跨域加载SWF
2013-07-11 12:53 866AS3的安全沙箱的确是 ... -
解决AS3在ie中初始化时stageWidth和stageHeight为0
2013-06-14 09:23 973先看下面的一段脚本,这是比较经典的初始化脚本: pac ... -
动态获取swc中的类
2013-05-25 10:32 909想通过代码生成,来获取swc中的类,并且可以作为普通类正常使 ... -
AS3 中字符串的format功能实现
2013-05-25 10:19 805使用C#的朋友都知道,string.Format();还是挺 ... -
总结调用Flash的几种方法
2013-05-02 16:18 1624一、Adobe 提供的方法 <object wi ... -
Flash3D错误集锦
2013-05-02 14:03 895VerifyError: Error #1014: 无法找到 ... -
使用scale拉伸之后的坐标问题
2013-04-12 09:38 1239最近发现论坛多了很多 ... -
30个实用的网页设计工具
2013-03-20 09:58 780作为一位网页设计师或开发者,你一直需要搜寻获取强大的网页设计 ... -
如何成为强大的程序员?
2013-03-11 11:27 698Aaron Stannard是新创公 ... -
漫谈重构
2013-03-11 11:09 821因为工作内容的原因, ... -
AS3使用谷歌API生成二维码
2012-12-10 16:24 1311二维码在新闻杂志,网站,网络广告,电视广告等地方随处可见 ... -
OOP的聚合原则
2012-12-10 16:21 899什么是聚合? 聚合可以很好地表达对象是什么和做 ... -
压缩速率追踪
2012-11-02 14:16 1425Flash Player 11.3添加了一个压缩和解压B ...
相关推荐
基于Qt实现局域网Socket通信系统源码。分别有服务端(Server)和客户端(Client) 服务端默认监听本机IP的6666端口 本人实测在linux(需防火墙开启端口)和windows下完美运行。基于Qt实现局域网Socket通信系统源码。...
windows下socket通信代码,带注释,适合初学者;包含客户端和服务器两个文件
socket通信库,c++编写,只需调用几个函数即可完成socket通信过程。简单易用,C#等其他语言可调用.问题沟通可发送邮件至gaocongly@126.com
c语言下进行socket通信
基于Qt实现的TCP socket通信,这是我学习qt socket通信自己写的一个小例子,希望对你有所帮助。整个文件包括服务端和客户端工程代码,具有如下功能: 1. 服务端支持多个客户端与之连接; 2. 服务端支持客户端...
socket通信文件传输 socket通信文件传输 socket通信文件传输 socket通信文件传输
linux C语言 socket通信聊天小程序
什么是socket通信? TCP/IP协议是传输层协议,主要解决数据如何在网络中传输。HTTP是应用层协议,主要解决如何包装数据。 Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的...
Android socket通信聊天,客户端+服务端
C#做服务器,Android做客户端,实现Socket通信
基于C#开放式TCP通信建立与西门子PLC的socket通信示例
Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信Socket通信
文件传输 聊天 socket通信 文件传输 聊天 socket通信 文件传输 聊天 socket通信
C#实现的简单Socket通信。以及AES加密。
一款C#开发的稳定完整版的Socket通信应用实例
这是android socket通信的实例程序,具体请参考: http://blog.csdn.net/htttw/article/details/7574372
matlab环境下socket通信 。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
2个窗口分别模拟服务器端和客户端,基于TCP协议的socket通信,实现互相通信
socket通信代码,包括服务端和客户端程序,服务端和客户端能实现通信
C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...