Flash Socket 的基本通讯协议流程例子

分类: flash builder2012-05-09 09:30 13人阅读 评论(0) 收藏 举报

原文:http://www.sujun.org/article.asp?id=51

actionscript3.0 Socket通信实例文章收藏:http://as3.aa-a.net/index.php/as3-socket-communication-examples.html

http://blessht.iteye.com/blog/1136888

Flash Socket 的两种 API:

1. XMLSocket
AS2.0时采用的socket通讯类,在AS3.0时依然保留。该类只能通过发送字符串,一般发送XML格式的字符号串到服务端
2. Socket
AS3.0才拥有的对象,可以传输精确到字节(Byte),可以充分发挥网络通讯的功能了。

Flash Socket 好助手 ByteArray:

1. ByteArray 类提供用于优化读取、写入以及处理二进制数据的方法和属性
2. 在这里主要是利用ByteArray做数据缓存,把socket中的数据都取出来在ByteArray中存放,这样只操作ByteArray,安全。

Flash 的安全策略机制:

1. 当 Flash 连接服务器需要安全策略验证时,会向服务端发送特定的字符串信息:"<policy-file-request/>"
2. 服务端在验证到这个字符串之后,马上给Flash返回策略文件。客户端收到策略文件之后会断开重新连接该服务器(假设正确的策略文件)
<cross-domain-policy>
<allow-access-from domain="*" to-ports="* "/>
</cross-domain-policy>

Socket 字节传输的协议结构:

1. 根据socket发送字节特性,可以自定义通讯协议,从而提高了协议的灵活性。
2. 最基础的协议结构:传输内容长度+ 传输具体内容(len + body)
3. 说明:这是最基本的传输格式,每次发一段数据给服务器的时候,都先声明一个长度(int,4byte),表示后面多少字节的内容是这次消息的具体内容(多少byte)

客户端相关代码:

socket = new Socket();
//监听socket事件
socket.addEventListener(Event.CONNECT,onConnected);
socket.addEventListener(Event.CLOSE,onClosed);
socket.addEventListener(IOErrorEvent.IO_ERROR,ioError);
socket.addEventListener(ProgressEvent.SOCKET_DATA,onData);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError);private function onConnected(evt:Event):void
{userName = "soda" + Math.floor(Math.random() * 100000);//连接成功,进行发送数据var byteArray:ByteArray = new ByteArray();//登陆消息byteArray.writeShort(LOGIN);byteArray.writeUTF(userName);socket.writeShort(byteArray.length);socket.writeBytes(byteArray);socket.flush();
}private function ioError(event:IOErrorEvent):void
{trace("连接socket服务器错误");}
private function onClosed(evt:Event):void
{trace("socket closed");
}
private function securityError(event:SecurityErrorEvent):void
{trace("SecurityErrorEvent");
}private function onData(evt:ProgressEvent):void
{//一有收到数据的事件,就通过这个函数进行检验parseNetData();
}//解析对应的网路数据
private function parseProtocol():void
{var moveX:int = 0;var moveY:int = 0;//解析出cmdvar cmd:int = bytes.readShort();switch(cmd){case OTHER_USERS://处理玩家进入var user:User = new User();var otherName:String = bytes.readUTF();var isHero:Boolean = false;moveX = bytes.readShort();moveY = bytes.readShort();if(otherName == userName){//初始化一个角色hero = user;isHero = true;}addChild(user);user.setUserName(otherName,isHero);user.x = moveX;user.y = moveY;userMap[otherName] = user;trace("有用户进入....." + otherName);break;case MOVE://解析移动协议var moveName:String = bytes.readUTF();moveX = bytes.readShort();moveY = bytes.readShort();//取出对应的用户var moveUser:User = userMap[moveName];if(moveUser != null){moveUser.x = moveX;moveUser.y = moveY;}break;case EXIT:var exitName:String = bytes.readUTF();//取出对应的用户var exitUser:User = userMap[exitName];userMap[exitName] = null;if(exitUser != null){removeChild(exitUser);}break;}
}

AS3 发送指定长度指定编码的固定字符串(解决乱码问题):

var msg:String = "my name is soda";
var byte = new ByteArray();
byte.writeMultiByte(msg, "gb2312");  //指定字符编码集
byte.length = 32;
socket.writeBytes(byte);

Socket & AMF3:

// Socket比起原来的XMLSocket来说,增加了可传递二进制数据,而AMF3则可以封装很多类型的数据 
// 发送代码;   
var bytes:ByteArray = new ByteArray();
bytes.writeObject( { event:"send", message:input.text } );
input.text = "";
bytes.compress();
socket.writeBytes(bytes);
socket.flush();   // 接收代码;   
var bytes:ByteArray = new ByteArray();
socket.readBytes(bytes);
bytes.uncompress();
var object:Object = bytes.readObject();

registerClassAlias() 函数的使用(序列化、反序列化相关):

当以 Action Message Format (AMF) 对一个对象进行编码时,保留该对象的类(类型)。 将对象编码为 AMF 时,该函数将保存该对象的类的别名,以便在解码对象时可以恢复该类。 如果编码上下文没有为对象的类注册别名,该对象将被编码为一个匿名对象。 同样,如果解码上下文注册了不同的别名,将为解码后的数据创建一个匿名对象。

此示例使用 registerClassAlias() 函数为 ExampleClass 注册一个别名 ( com.example.eg )。 由于为类注册了别名,因此可以将对象作为 ExampleClass 的实例反序列化,且代码将输出 true。 如果删除 registerClassAlias() 调用,则代码将输出 false。

package {import flash.display.Sprite;import flash.net.registerClassAlias;import flash.utils.ByteArray;public class RegisterClassAliasExample extends Sprite {public function RegisterClassAliasExample() {registerClassAlias("com.example.eg", ExampleClass);var eg1:ExampleClass = new ExampleClass();var ba:ByteArray = new ByteArray();ba.writeObject(eg1);ba.position = 0;var eg2:* = ba.readObject();trace(eg2 is ExampleClass); // true}}
}class ExampleClass {}

Flash Socket 的基本通讯协议流程例子相关推荐

  1. tlv c语言,浅谈自定义通讯协议——TLV | 求索阁

    所谓通讯协议就是指通信双方对数据传送控制的一种约定.约定中包括对数据格式,同步方式,传送速度,传送步骤,纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,倘若一方不遵守,便会直接导致数 ...

  2. 网络编程2_网络通讯协议, socket(tcp, udp)

    一. 网络通讯协议     互联网协议的功能: 定义计算机如何接入internet, 以及接入internet的计算机的通信标准     互联网协议按照功能的不同分为osi七层或tcp/ip五层    ...

  3. 关于Socket通讯时通讯协议的制定

    在系统开发过程中,如果涉及到了Socket通讯,那就要制定好通讯的协议,只有制定好了规则,后面的工作才方便顺利展开,制作通讯协议时要考虑到通讯的安全性,必要的信息要经过加密处理,同时也要考虑到系统的可 ...

  4. 上下位机通讯协议_嵌入式中自定义协议的一些典型例子

    关于自定义协议,对于会的人很简单,对于不会的人就摸不着头脑.下面分享一些关于自定义协议的笔记. 什么是协议? 协议这个概念我觉得挺杂的.就像嵌入式的概念一样,说法不一,比如大家常常争论FPGA是不是嵌 ...

  5. [转]Flash socket通讯中的安全策略问题详解

    Flash socket通讯中的安全策略问题详解 昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这 ...

  6. mosquitto c语言编程,MQTT通讯协议(mosquitto)发布订阅例子C语言实现

    1.前言 前面对MQTT进行了简单的介绍,并了解了如何在Linux上搭建MQTT 的运行 环境,参考连接:MQTT通讯协议(mosquitto)在Linux上的环境构建与测试,那些仅仅是经过命令去测试 ...

  7. 联网常见通信协议与通讯协议梳理- 通讯协议

    1  "通信"与"通讯"傻傻分得清 传统意义上的"通讯"主要指电话.电报.电传.通讯的"讯"指消息(Message),媒 ...

  8. IOT(34 )---联网常见通信协议与通讯协议梳理- 通讯协议

    联网常见通信协议与通讯协议梳理[上]- 通讯协议 1  "通信"与"通讯"傻傻分得清 传统意义上的"通讯"主要指电话.电报.电传.通讯的&q ...

  9. Java Socket通信之TCP协议

    文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...

最新文章

  1. pairplot 中参数hue的作用就是在图像中将输出的散点图按照hue指定的特征或标签的类别的颜色种类进行区分
  2. Windows Mobile使用Shared Memory(共享内存)进行IPC(进程间通信)的开发
  3. socketserver模块解析
  4. 设计模式05-建造者模式
  5. php内容管理系统开源源码,fcontex 开源内容管理系统 php版 v1.0.3
  6. 文明重启服务器维护怎么卡进去,文明重启更新之后进不去,具体玩法介绍
  7. CTR 模型之 Deep Cross (DCN) 与 xDeepFM 解读
  8. Unity4.6版本下载
  9. c语言中怎么避免整数除法,大整数除法
  10. 如何带领好一个团队,管理的五条实用建议告诉你
  11. html新浪短域名api,新浪短链接API接口示例
  12. 2022-07-02 Android 进入app 后 距离传感器控制手机屏幕熄灭的方法-接近传感器Proximity Sensor的信号
  13. 发布jar包至maven本地库及私服
  14. 计算机中通道的基本功能,Photoshop中各个面板的基本功能介绍 -电脑资料
  15. SAP的萨班斯法案SOA解决方案
  16. java 生成pdf
  17. city code table广东_【考试|定了!2021年广东高中学考安排来了】招生|高考|普通高中|英语_热点...
  18. 主成分分析(R语言)
  19. 汇编程序设计-11-AX、BX、CX、DX寄存器
  20. 二层网络及三层网络的子网掩码设置原则

热门文章

  1. shopee引流方式有哪些,商家如何为自己店铺做引流?
  2. 用python将txt文件中的内容导入到excel文件中
  3. 恒丰银行计算机岗位面试题,2019恒丰银行招聘面试试题及参考答案
  4. SpringCloud微服务项目实战 - 6.延迟任务
  5. SaaS应用价值存巨大争议
  6. java计算机毕业设计高校实习实训管理系统源码+mysql数据库+系统+lw文档+部署
  7. 文本与字体样式3.0
  8. 计算机辅助设计软件应用答案,专科《计算机辅助设计软件的应用》试卷答案.doc...
  9. 【Mac】动图截图工具Kap
  10. 大山深处的孩子,正在看见更远的星空