- 浏览: 593526 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 681as3 Loader 加载资源后内存泄露无法释放的问题。 ... -
as3判断flash player版本的函数
2014-06-10 20:35 845//判断当前版本是否高于9.0.115.0为例子. pr ... -
CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
2014-04-03 15:25 1024华文细黑:STHeiti Light [STXihei]华文 ... -
as3.0的垃圾回收机制
2013-09-07 14:02 1510还是同样的博客,还是同样的作者(Daniel Sidhio ... -
AIR程序多开
2013-09-07 13:55 1008AIR应用通常不能像QQ那样能进行多开操作。为了让一个用AI ... -
starling性能优化总结
2013-07-22 14:06 1475在项目开发的过程中总结了一下starling的性能优化方案: ... -
AS3 Socket从零开始
2013-07-22 12:54 1105大家如果想学AS3 Socket直接在百度里搜一下,会找到很 ... -
绕开AS3安全沙箱 跨域加载SWF
2013-07-11 12:53 916AS3的安全沙箱的确是 ... -
解决AS3在ie中初始化时stageWidth和stageHeight为0
2013-06-14 09:23 1021先看下面的一段脚本,这是比较经典的初始化脚本: pac ... -
动态获取swc中的类
2013-05-25 10:32 957想通过代码生成,来获取swc中的类,并且可以作为普通类正常使 ... -
AS3 中字符串的format功能实现
2013-05-25 10:19 842使用C#的朋友都知道,string.Format();还是挺 ... -
总结调用Flash的几种方法
2013-05-02 16:18 1670一、Adobe 提供的方法 <object wi ... -
Flash3D错误集锦
2013-05-02 14:03 939VerifyError: Error #1014: 无法找到 ... -
使用scale拉伸之后的坐标问题
2013-04-12 09:38 1293最近发现论坛多了很多 ... -
30个实用的网页设计工具
2013-03-20 09:58 829作为一位网页设计师或开发者,你一直需要搜寻获取强大的网页设计 ... -
如何成为强大的程序员?
2013-03-11 11:27 729Aaron Stannard是新创公 ... -
漫谈重构
2013-03-11 11:09 864因为工作内容的原因, ... -
AS3使用谷歌API生成二维码
2012-12-10 16:24 1359二维码在新闻杂志,网站,网络广告,电视广告等地方随处可见 ... -
OOP的聚合原则
2012-12-10 16:21 933什么是聚合? 聚合可以很好地表达对象是什么和做 ... -
压缩速率追踪
2012-11-02 14:16 1457Flash Player 11.3添加了一个压缩和解压B ...
相关推荐
Socket通信在IT行业中是网络编程的基础,特别是在C#这样的多平台开发环境中,Socket通信库的使用至关重要。本实例,"C# Socket通信稳定完整版类库实例",为我们提供了一个全面且稳定的解决方案,用于实现客户端与...
在Windows环境下进行网络编程时,Socket通信是一种常用的技术。Socket接口是操作系统提供的网络通信API,允许应用程序通过TCP/IP协议栈与其他计算机进行数据交换。本文将详细介绍Windows下的Socket通信代码,包括...
**C++ Socket通信库** C++ Socket通信库是用于实现网络通信的一种工具,它基于操作系统提供的Socket接口,为开发者提供了一种在C++程序中进行网络数据交换的标准方法。Socket库简化了网络编程,允许程序员通过调用...
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
Socket通信的基本步骤包括:创建ServerSocket,等待客户端连接,创建Socket对象,通过输入/输出流进行数据交换,最后关闭连接。 在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口...
在MATLAB环境中实现Socket通信是将强大的MATLAB计算能力与网络通信功能相结合的重要技术。Socket是一种网络编程接口,它允许程序之间通过网络进行双向通信。MATLAB提供了丰富的工具和函数来支持Socket通信,使得用户...
Socket通信是一种基于TCP/IP协议族的网络通信方式,它允许两个网络应用程序通过网络进行数据交换。在本场景中,我们关注的是C#作为服务器端,Android作为客户端的Socket通信实现。这种通信方式常用于移动应用与后台...
在IT领域,Socket通信是一种基于TCP/IP协议族的网络编程接口,用于实现不同网络设备间的双向通信。在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论...
"Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现聊天应用时。本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解...
本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 1. **Java Socket基础** Java中的`java.net.Socket`类提供了网络通信的能力,它允许我们在两个应用程序之间建立...
Socket通信是一种基于网络协议(如TCP/IP)进行进程间通信的技术,它允许两台计算机通过互联网交换数据。在本文中,我们将深入探讨“点到点通信”中的Socket通信代码,包括服务端和客户端的实现。 首先,让我们了解...
Socket通信在IT行业中扮演着至关重要的角色,它是网络应用程序间通信的基础。HPSocketCS是一个专为.NET平台设计的高效、稳定的Socket通信框架,适用于开发跨平台的客户端和服务器端应用。本文将深入探讨HPSocketCS的...
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...
Socket 通信异常解决总结 Socket 通信异常是指在网络通信过程中出现的各种错误和异常,包括网络连接断开、服务器端或客户端程序异常、网络链路异常等。这些异常会导致 Socket 连接断开,影响系统的稳定性和可靠性。...
本篇文章将详细探讨C#中如何使用AES加密进行Socket通信,以及涉及的TCP/IP协议。 首先,让我们了解Socket通信的基础。Socket是操作系统提供的网络编程接口,它允许应用程序通过TCP/IP协议发送和接收数据。在C#中,`...
基于Qt实现局域网Socket通信系统源码。分别有服务端(Server)和客户端(Client) 服务端默认监听本机IP的6666端口 本人实测在linux(需防火墙开启端口)和windows下完美运行。基于Qt实现局域网Socket通信系统源码。...
本项目涉及的"Linux C语言 socket通信聊天小程序"是一个基础的网络聊天应用,支持群聊和私聊功能。 首先,我们需要理解什么是Socket。Socket是网络编程的一个接口,它提供了进程间通信(IPC)的能力,特别是在网络...
Socket通信是一种基于TCP/IP协议族实现的网络通信方式,它允许两台计算机通过网络进行双向通信。在文件传输中,Socket通信提供了一种灵活、高效的方法,尤其适用于大数据量或者跨平台的文件交换。以下是对Socket通信...
在Android平台上,实现基于局域网的Socket通信是一项常见的任务,尤其在开发涉及设备间通信的应用时。Socket通信允许两台设备通过网络连接直接交换数据,而无需中间服务器。在这个项目中,我们关注的是Android设备...