【各种系列教程】fms p2p视频教程 第二节FMS通信

来源:互联网 发布:算法分析 概述 ppt 编辑:程序博客网 时间:2024/05/16 00:31




第二节FMS通信2.1 FMS基础知识我们在通信前学习下FMS服务端一些基础知识。

Application

该类呢包含一个FMS应用程序实例的信息,这些信息会一直到应用程序实例被卸载为止。一个Flash Media Server应用程序的每一个实例都有一个application对象,这是Application类的一个单一实例。你不需要使用构造器函数来创建这个application对象;当一个应用程序由服务器例示时,application对象会被自动创建。

Application类大家也可以当成FMS服务器的主应用程序类,里面包含很多的事件,属性,方法等。这里呢我们只列举些我们本节需要学到,我们不可能上来什么都讲,我们记忆力是有限的,所以我们会采取讲到什么学什么,学以致用。

q Application.onAppStart 当这个应用程序被服务器装载时调用。意思就是首次调用!
q Application.onAppStop 当这个应用程序被服务器卸载时调用。当我们服务器关闭时候应用程序就会被卸载,就会触发该事件。
q Application.onConnect 当一个客户机连接到这个应用程序时调用。就是当一个客户端连接到服务端,就会触发该事件。

2.2 FMS 进行通信1.下面我们来先写客户端,我们接着上一个项目开始新建文件,如图2.1所示:

图2.1 新建应用程序
2.然后呢弹出个对话框,里面输入应用程序名称,这里呢名字随意起,如图2.2所示:

图2.2 应用程序名称
3.在写程序之前我们先在我们FMS安装文件的根目录下的applications文件夹里建立个文件夹存放我们该项目的服务端程序,在这里我新建了个文件夹名为”test”,如图2.3所示:

如图2.3新建文件夹test
4.打开我们刚建立好的应用程序,在舞台拉入一个按钮,或者手动敲入一个按钮标签,命为“连接FMS”(名字大家可以随意),设置了垂直,水平间距为0,然后在添加个单击事件,当我们单击按钮则进行连接FMS代码如下:

<s:Button label="连接FMS" verticalCenter="0" horizontalCenter="0click="connect()"/>

5.下面则开始写单击连接按钮事件代码:

<fx:Script>
                <![CDATA[
                        import mx.controls.Alert;
                        
                        //NetConnection 类在客户端和服务器之间创建双向连接。
                        private var netconnect:NetConnection = new NetConnection();

                        private function connect():void
                        {
                                //该事件表达连接其状态或错误条件时调度。netStatus 事件包含一个 info 属性,
                                //该属性是一个包含事件特定信息(例如,连接尝试成功还是失败)的信息对象。
                                netconnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
                                //该函数是填写连接地址,或者参数,该函数运行后就会开始自动连接
                                netconnect.connect("rtmp://localhost/test");
                        }
                        
                        private function netStatusHandler(e:NetStatusEvent):void
                        {
                                //我们弹出连接FMS时的状态信息
                                Alert.show(e.info.code);
                        }
                ]]>
        </fx:Script>
大家开始连接地址后面还带了“test”这个就是我们刚刚建立的根目录的文件夹,我们项目要连接时候都的写具体项目路径,因为我们在该路径还要写服务端程序呢,亲!

再来我们就看下事件的info属性集合:


NetConnection.Call.BadVersion

error

以不能识别的格式编码的数据包。

NetConnection.Call.Failed

error

NetConnection.call()方法无法调用服务器端的方法或命令。

NetConnection.Call.Prohibited

error

Action Message Format (AMF) 操作因安全原因而被阻止。AMF URL与文件(其中包含调用 NetConnection.call() 方法的代码)不在同一个域中,或者 AMF 服务器没有信任文件(其中包含调用NetConnection.call() 方法的代码)所在域的策略文件。

NetConnection.Connect.AppShutdown

error

正在关闭服务器端应用程序。

NetConnection.Connect.Closed

status

成功关闭连接。

NetConnection.Connect.Failed

error

连接尝试失败。

NetConnection.Connect.IdleTimeout

status

Flash Media Server 断开了与客户端的连接,因为客户端的闲置时间已超过了 <MaxIdleTime> 的配置值。 在 Flash Media Server上,<AutoCloseIdleClients> 默认情况下处于禁用状态。 启用时,默认超时值为 3600 秒(小时)。有关详细信息,请参阅 关闭闲置连接

NetConnection.Connect.InvalidApp

error

对 NetConnection.connect() 的调用中指定的应用程序名称无效。

NetConnection.Connect.NetworkChange

status

Flash Player 检测到网络更改,例如,断开的无线连接、成功的无线连接或者网络电缆缺失。
使用此事件检查网络接口更改。不要使用此事件实现 NetConnection重新连接逻辑。使用 "NetConnection.Connect.Closed" 来实现NetConnection 重新连接逻辑。

NetConnection.Connect.Rejected

error

连接尝试没有访问应用程序的权限。

NetConnection.Connect.Success

status

连接尝试成功。


好了该讲的东西都讲到了,下面开始运行看下效果,如图2.4所示:

图2.4 运行效果
在单击按钮看下结果如图2.5所示:

图2.5连接状态

NetConnection.Connect.Success

status

连接尝试成功。


我们可以对照刚才发的状态来找,可以看到这个状态是代表连接成功,如果大家运行是这种效果就是成功的。

下面我们打开FMS安装根目录打开“tools”目录,在打开“fms_adminConsole.swf”文件,输入账号和密码就进入到后台,如图2.6所示:

图2.6 后台效果
下面我们开始编写服务端代码首先打开FLASH软件,如图2.7所示:

图2.7 FLASH界面
然后单击菜单上的文件选择,新建选项,如图2.8所示:

2.8新建选项
然后会弹出可以新建文件的弹出框,选择通信文件。如图2.9所示:

2.9新建通信文件
然后保存下,保存到根目录application/test目录,命名最好为“main.asc”,如图2.10所示:

图2.10命名
下面看下具体事件方法用途:


Application.onAppStart
可用性
     Flash Communication Server MX
用法
    application.onAppStart = function (){}
参数
    无
返回
    无
描述
       事件处理器。当服务器第一次装载这个应用程序实例时调用。你使用这个处理器来初始化一个应用程序的状态。


Application.onAppStop
可用性
     Flash Communication Server MX
用法
    application.onAppStop = function (info){}
参数
     info 一个信息对象,它解释了为什么这个应用程序会被停止运行。参看“服务器端信息对象”。
返回
       值通过你定义的函数被返回,如果有的话;否则,将返回null。要拒绝卸载这个应用程序,返回false;
    要卸载这个应用程序,返回true或任何非false值。
描述
        事件处理器。当这个应用程序就要被服务器卸载时调用。你可以定义一个当这个事件处理器被调用时要执行的函数。
    如果函数返回true,则这个应用程序被卸载。如果函数返回false,则这个应用程序没有被卸载。如果你没有为这个事件
    处理器定义一个函数,或是如果返回值不是一个布尔值,则当这个事件被调用时这个应用程序会被卸载。


Application.onConnect
可用性
      Flash Communication Server MX
用法
     application.onConnect = function (clientObj [, p1, ..., pN]){}
参数
    clientObj 连接到这个应用程序的客户机。
    p1 ..., pN 传递给application.onConnect方法的可选的参数。当一个客户机连接到这个应用程序时,这些参数自客户机端的
    NetConnection.connect方法传递而来。
返回
    返回你提供的值。

    例如,通过在你的application.onConnect事件处理器中作一个对一个应用程序服务器的NetConnection调用,并依赖于答复处理器接
收到的信息,让答复处理器调用application.acceptConnection或application.rejectConnection来执行一个外部的身份验证。



然后在文件里填写下面代码:

         /*
                        *
                        * 当这个应用程序被服务器装载时调用。意思就是首次调用!
                        *
                        */
                        application.onAppStart = function()
                        {
                                trace("该事件一般用在初始化对象中使用!");
                        }
                        
                        /*
                        *
                        * 来接受客户机的连接
                        *
                        */
                        application.onConnect = function(client)
                        {
                                trace("终于算是连接上了!");
                                //该方法是接受客户端的连接
                                application.acceptConnection(client);
                        }
                        
                        /*
                        *
                        * 当这个应用程序被服务器卸载时调用。意思就是最后次调用!
                        *
                        */
                        application.onAppStop = function(info)
                        {
                                trace("该应用程序将被卸载!"+info);
                        }

上面都有注释不难理解吧,好了我们打开FMS后台进行观看,然后按F11运行FB的内容,单击下“连接FMS”按钮,我们来看下后台情况,如图2.11所示:


图2.11 演示成功连接上
我们可以看到我们在接受客户端事件里的代码成功运行,但是初始化和卸载事件并没运行,提示下用application.onAppStart和application.onAppStop来初始化和清除一个应用程序中的全局变量,因为这些事件在一个应用程序实例的生命期中都只被调用一次。我们单击下刷新按钮看下效果如图2.12所示:

图2.12 刷新结果
我们可以看到刷新后我们可以看到开始和结束函数同时被运行了,在看下运行FB的页面如图2.13所示:

图2.13 FB运行效果
我们可以看到刷新后程序就会进行断开连接,下面我们演示下客户端连接时候向服务端传送参数:

客户端

//该函数是填写连接地址,或者参数,该函数运行后就会开始自动连接
netconnect.connect("rtmp://localhost/test","ken");

服务端:

         /*
                        *
                        * 来接受客户机的连接,第一个参数是客户端对象,第二个参数就是客户端传递过来的参数
                        *
                        */
                        application.onConnect = function(client,str)
                        {
                                trace(str+"终于算是连接上了!");
                                //该方法是接受客户端的连接
                                application.acceptConnection(client);
                        }

这次我们在运行下看下效果,如图2.14所示:

图2.14 最终效果
大家看到参数也传递成功,本节就到这里吧。下回合见!

最后在宣传下《As-Flex and Flash从入门到精通》初级教程如果大家喜欢

http://product.china-pub.com/3502720

该地址进行浏览下


0 0
原创粉丝点击