`

[AS3]Flash Socket底层接受数据的初级处理

    博客分类:
  • AS3
阅读更多

在家上网赚钱更容易

用flash去开发应用,,免不了网络通讯,特别是网络游戏,需要用到即使通讯。 as3提供了两个支持即时通讯的类:XMLSocket和Socket,前者其实是只支持发送字符串,而后者就强大多了,支持发送字节,相对来说比较底层,而这也给我们更多的发挥空间。 其实,flash socket的网络底层接受数据,就以与C++服务器通讯为例子,C++服务器一般会发一段一段数据过来,每段数据都是由一定结构组成的,一般是消息头和消息头,然后再逐步分层解析。 在这里,我只说接受网络底层的处理,一般一段数据前面,还有有一个4个字节左右的数据,表示的是后面网络流里的数据有多少.... 看下简单示意图  我们网络底层需要做的处理,就是根据头4个字节判断出后面的数据大小,然后把那一整块取出来,抛给上层解析,然后又在不停地侦听,收到指定大小之后,又做类似的操作,下面看详细的代码

 

  1. /** 
  2.  
  3.  * @(#)NetBottomHandle.as 
  4.  
  5.  * @author soda.C  mail:sujun10@21cn.com 
  6.  
  7.  * @version  1.0 
  8.  
  9.  * <br>Copyright (C), 2007 soda.C 
  10.  
  11.  * <br>This program is protected by copyright laws. 
  12.  
  13.  * <br>Program Name:GameHall 
  14.  
  15.  * @data 2008-3-20 
  16.  
  17.  */  
  18.   
  19. package org.sujun.net   
  20.   
  21. {  
  22.   
  23.     import flash.net.Socket;  
  24.   
  25.     import flash.events.ProgressEvent;  
  26.   
  27.     import flash.utils.ByteArray;  
  28.   
  29.     /** 
  30.  
  31.      * socket数据流里的底层处理,从这里接受到服务器的数据,满足条件后就会抛出需要的字节 
  32.  
  33.      * 对数据流的数据,不做任何处理 
  34.  
  35.      */  
  36.   
  37.     public class NetBottomHandle   
  38.   
  39.     {  
  40.   
  41.         private var socket        :Socket;          
  42.   
  43.         private var listener    :Function;        //接受网络解析出来的数据  
  44.   
  45.         private var msgLen        :int;            //消息长度  
  46.   
  47.         private var msgLenMax    :int;            //收到的消息最大长度  
  48.   
  49.         private var headLen        :int;            //消息头长度  
  50.   
  51.         private var isReadHead    :Boolean;        //是否已经读了消息头  
  52.   
  53.         private var bytes        :ByteArray;        //所读数据的缓冲数据,读出的数据放在这里  
  54.   
  55.           
  56.   
  57.         public function NetBottomHandle()  
  58.   
  59.         {  
  60.   
  61.             msgLenMax = 5000;    //5000字节  
  62.   
  63.             headLen = 4;        //4个字节  
  64.   
  65.             bytes = new ByteArray();  
  66.   
  67.               
  68.   
  69.         }  
  70.   
  71.         /** 
  72.  
  73.          * 设置一个网络通讯实例 
  74.  
  75.          */    
  76.   
  77.         public function setSocket(socket:Socket):void  
  78.   
  79.         {  
  80.   
  81.             this.socket = socket;  
  82.   
  83.             //监听......  
  84.   
  85.             socket.addEventListener(ProgressEvent.SOCKET_DATA, onServerData,false,0,true);  
  86.   
  87.               
  88.   
  89.               
  90.   
  91.         }  
  92.   
  93.         /** 
  94.  
  95.          * 接受在网络层里收到的原始数据,传递过来的数据为描述长度,以及ByteArray对象functon(len,bytes) 
  96.  
  97.          * @param listener:接受数据函数 
  98.  
  99.          */  
  100.   
  101.         public function receiverNetData(listener:Function):void  
  102.   
  103.         {  
  104.   
  105.             this.listener = listener;  
  106.   
  107.         }  
  108.   
  109.         /** 
  110.  
  111.          * 服务器发送过来的数据都在这里接收,最底层的 
  112.  
  113.          */  
  114.   
  115.         private function onServerData(event:ProgressEvent):void  
  116.   
  117.         {  
  118.   
  119.             //一有收到数据的事件,就通过这个函数进行检验  
  120.   
  121.             parseNetData();  
  122.   
  123.         }  
  124.   
  125.         /** 
  126.  
  127.          * 解析网络数据流 
  128.  
  129.          */  
  130.   
  131.         private function parseNetData():void  
  132.   
  133.         {  
  134.   
  135.             //如果需要读信息头  
  136.   
  137.             if(isReadHead)  
  138.   
  139.             {  
  140.   
  141.                 if(socket.bytesAvailable >= headLen)  
  142.   
  143.                 {  
  144.   
  145.                     //读出指示后面的数据有多大  
  146.   
  147.                     msgLen = socket.readUnsignedInt();  
  148.   
  149.                     isReadHead = false;  
  150.   
  151.                 }  
  152.   
  153. margin: 0px; border-left: #6ce26c 3px solid; border-top-s
    分享到:
    评论

相关推荐

    FLASH AS3 SOCKET收发16进制示例

    总的来说,"FLASH AS3 SOCKET收发16进制示例"涵盖了网络编程的基础,以及如何在Flash环境中处理16进制数据。了解这些概念和技巧对于开发需要实时通信的Flash应用程序至关重要。记住,安全性和性能优化也是使用Socket...

    (AS3)socket+客户端与服务端+实例

    4. **事件驱动**:AS3的Socket通信是基于事件驱动的,例如Socket事件(ConnectEvent.CONNECT、DataEvent.DATA、ProgressEvent.PROGRESS等),这些事件帮助开发者处理连接状态、数据接收和发送过程。 5. **异常处理*...

    flash as3/java socket 聊天室

    标题中的“flash as3/java socket 聊天室”指的是使用Adobe Flash ActionScript 3(AS3)语言和Java的Socket编程技术实现的一个在线聊天应用程序。这个应用允许用户通过网络进行实时通信,创建一个基本的聊天环境。...

    flash as3.0 socket编程

    Flash AS3.0 Socket 编程 Flash AS3.0 中的 Socket 编程是使用 ActionScript 3.0 进行网络编程的一种方式。它允许 Flash 应用程序与服务器之间建立连接,以便进行数据交换。下面是关于 Flash AS3.0 Socket 编程的...

    flash actionscript3游戏开发之as3的socket通信方式介绍即使用XMLSocket.zip

    在Flash ActionScript3游戏开发中,Socket通信是实现客户端与服务器之间实时互动的重要技术手段。本文将深入探讨AS3中的Socket通信方式,特别是利用XMLSocket进行网络交互的细节。 首先,XMLSocket是AS3中用于低级...

    as3_Socket_的简单实例

    AS3中的`Socket`类是Flash Player 9引入的新特性,用于创建基于TCP/IP协议的网络连接。Socket连接允许应用程序直接与远程服务器进行低级别的数据通信,而不依赖于特定的应用层协议,如HTTP或HTTPS。这种直接的连接...

    as3_socket

    本文将详细介绍AS3中的Socket编程基础,并通过具体的示例来解释如何实现与Socket服务器的连接、数据交换以及错误处理等关键步骤。 #### 二、基础知识 在开始深入探讨之前,我们需要了解一些基本概念: - **Socket**...

    flashas3.0socket编程

    资源名称:flash as3.0 socket编程 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    c# Socket 多线程 分包 发送/接受数据

    在C#中,Socket编程是网络通信的基础,它允许应用程序...以上就是关于“C# Socket 多线程 分包 发送/接受数据”这一主题的详细解释。在实际开发中,理解和掌握这些知识点对于构建高效、可靠的网络应用程序至关重要。

    flash actionscript3 as3通信 教程 socket与服务器通信, 多个swf之间通信.zip

    flash actionscript3 as3通信 教程 socket与服务器通信, 多个swf之间通信.zip

    AS3使用Socket的简单例子.txt

    ### AS3使用Socket的简单例子 #### 知识点概览 - **AS3 Socket编程基础** - **创建与配置XMLSocket对象** - **事件监听器的设置与使用** - **连接服务器及发送数据** - **接收服务器响应** #### 知识点详细解析 #...

    java和as3 socket通信 解决安全沙箱问题

    总结来说,Java和AS3间的Socket通信涉及创建服务器和客户端Socket实例,处理数据流,并解决Flash Player的安全沙箱限制。通过合理的编程实践和配置,你可以实现可靠的跨平台通信,从而构建高性能的实时应用。

    Socket底层协议Dll

    Socket底层协议Dll是计算机编程中用于网络通信的重要组件,它基于DLL(动态链接库)形式提供服务,使得应用程序能够实现跨平台的网络数据传输。DLL文件是Windows操作系统中的一种共享库,它包含了一系列预编译的函数...

    flash as3 socket编程基础

    ### Flash AS3 Socket编程基础知识详解 #### 一、引言 在现代互联网应用开发中,实时通信技术变得越来越重要。而Socket编程作为一种实现客户端与服务器之间实时数据交换的有效手段,在Flash开发领域同样占据着重要...

    Android笔记:Socket客户端收发数据

    在Android开发中,Socket通信是实现设备间数据传输的重要手段,尤其在构建网络服务和进行设备间的实时交互时。本文将深入探讨如何在Android平台上创建一个Socket客户端,以及如何通过TCP协议进行数据的发送和接收。 ...

    Flash AS3 中文帮助文档

    《Flash AS3 中文帮助文档》是针对Adobe Flash Professional CS3中的ActionScript 3.0编程语言提供的中文版API参考手册。ActionScript 3.0是Flash平台上用于创建交互式内容、动画和富互联网应用程序(RIA)的主要...

    Flash的Socket应用(Server用C#)

    在IT行业中,网络通信是至关重要的一个领域,而Flash的Socket应用则是实现客户端与服务器间实时数据传输的一种技术。本文将深入探讨如何使用C#语言构建一个基于Flash Socket的服务器,以及AS3.0(ActionScript 3.0)...

    UDP.rar_as3 udp_flash as3.0 UDP_flash发送udp_udp as3_windows as3.0

    在Flash Professional环境中打开FLA文件,我们可以看到相关的AS3代码和图形元素,这些代码可能是用来设置UDP连接,创建数据包,以及处理接收到的数据。 在AS3中实现UDP通信的步骤大致如下: 1. **初始化...

    as3与java简单socket交互demo

    AS3(ActionScript 3)和Java都是常用于创建跨平台应用的语言,而Socket编程则提供了底层的网络通信接口。本篇将深入探讨如何使用AS3与Java通过简单的Socket进行交互。 **AS3中的Socket通信** AS3是Adobe开发的脚本...

    flash socket 分块下载源码

    总之,AS3的Flash Socket结合HTTP分块下载技术,可以在不完整接收文件的情况下就开始处理数据,提高了用户体验。尽管随着HTML5的发展,Flash逐渐淡出舞台,但理解这种技术仍然有助于我们更好地理解和构建实时网络...

Global site tag (gtag.js) - Google Analytics