`
wgcode
  • 浏览: 599764 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

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


 
我们网络底层需要做的处理,就是根据头4个字节判断出后面的数据大小,然后把那一整块取出来,抛给上层解析,然后又在不停地侦听,收到指定大小之后,又做类似的操作,下面看详细的代码

/**
 * @(#)NetBottomHandle.as
 * @author soda.C  mail:sujun10@21cn.com
 * @version  1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Program Name:GameHall
 * @data 2008-3-20
 */
package org.sujun.net 
{
    import flash.net.Socket;
    import flash.events.ProgressEvent;
    import flash.utils.ByteArray;
    /**
     * socket数据流里的底层处理,从这里接受到服务器的数据,满足条件后就会抛出需要的字节
     * 对数据流的数据,不做任何处理
     */
    public class NetBottomHandle 
    {
        private var socket        :Socket;        
        private var listener    :Function;        //接受网络解析出来的数据
        private var msgLen        :int;            //消息长度
        private var msgLenMax    :int;            //收到的消息最大长度
        private var headLen        :int;            //消息头长度
        private var isReadHead    :Boolean;        //是否已经读了消息头
        private var bytes        :ByteArray;        //所读数据的缓冲数据,读出的数据放在这里
        
        public function NetBottomHandle()
        {
            msgLenMax = 5000;    //5000字节
            headLen = 4;        //4个字节
            bytes = new ByteArray();
            
        }
        /**
         * 设置一个网络通讯实例
         */  
        public function setSocket(socket:Socket):void
        {
            this.socket = socket;
            //监听......
            socket.addEventListener(ProgressEvent.SOCKET_DATA, onServerData,false,0,true);
            
            
        }
        /**
         * 接受在网络层里收到的原始数据,传递过来的数据为描述长度,以及ByteArray对象functon(len,bytes)
         * @param listener:接受数据函数
         */
        public function receiverNetData(listener:Function):void
        {
            this.listener = listener;
        }
        /**
         * 服务器发送过来的数据都在这里接收,最底层的
         */
        private function onServerData(event:ProgressEvent):void
        {
            //一有收到数据的事件,就通过这个函数进行检验
            parseNetData();
        }
        /**
         * 解析网络数据流
         */
        private function parseNetData():void
        {
            //如果需要读信息头
            if(isReadHead)
            {
                if(socket.bytesAvailable >= headLen)
                {
                    //读出指示后面的数据有多大
                    msgLen = socket.readUnsignedInt();
                    isReadHead = false;
                }
            }
            //如果已经读了信息头,则看能不能收到满足条件的字节数
            if(!isReadHead && msgLen <= msgLenMax)
            {
                //如果为0,表示收到异常消息
                if(msgLen == 0)
                {
                    //一般消息长度为0的话,表示与服务器出了错,或者即将被断开等,通知客户端,进行特别处理
                    listener(msgLen,null);
                    return ;
                }
                //数据流里的数据满足条件,开始读数据
                if(socket.bytesAvailable >= msgLen)
                {
                    //指针回归
                    bytes.position = 0;
                    //取出指定长度的网络字节
                    socket.readBytes(bytes, 0, msgLen);
                    listener(msgLen,bytes);
                }
            }
            isReadHead = false;
            //如果数据流里还满足读取数据条件,继续读取数据
            if(socket.bytesAvailable >= headLen)
            {
                parseNetData();
            }
        }
    }
}


 

 

  • 大小: 21 KB
分享到:
评论

相关推荐

    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开发领域同样占据着重要...

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

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

    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)...

    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