red5的第一个程序
发布时间:2020-12-15 04:56:34 所属栏目:百科 来源:网络整理
导读:第一个程序的运行是学习的莫大回报,也是继续下面学习的关键,只有顺利的运行了第一个程序才会 更加信心百倍的去学习更深一步的知识。 Red5+flex 或red5+flash 的项目一般都包括服务器和客户端俩个部分,服务器用java,客户端用 flex 或flash。编写并编译完
第一个程序的运行是学习的莫大回报,也是继续下面学习的关键,只有顺利的运行了第一个程序才会
更加信心百倍的去学习更深一步的知识。 Red5+flex 或red5+flash 的项目一般都包括服务器和客户端俩个部分,服务器用java,客户端用 flex 或flash。编写并编译完服务器端代码后需要把服务器的的应用部署到red5的webapps 目录下这和 传统的java应用没区别,客户端可以直接点击flash 文件运行。 下面开始第一个程序的编写,它分成服务器和客户端俩部分,以后的程序也都安这种方式分。 1.编写服务器端 打开eclipse 新建java 工程或javaee 工程chapter2(如果不熟悉eclipse 请参考附件eclipse 的 使用)。把red5安装目录下的red5.jar 以及lib 目录下的jar 都添加到工程的类库中。 新建包first,然后新建类,类名称为Application 并继承ApplicationAdapter。类的代码如下: package first; import org.red5.server.adapter.ApplicationAdapter; import org.red5.server.api.IConnection; public class Application extends ApplicationAdapter { public boolean appConnect(IConnection conn,Object[] args) { System.out.println(" 连接"); return true; } public String change(String str){ System.out.println(" 客户端调用服务器"); return str.toUpperCase();// 传入的字符串转换成大写后返回 } } 2.编写客户端 打开flexbuilder3 新建flex 工程(具体flexbuilder 的使用请参考附录),名字取名为chapter2。 打开项目中chapter2.mxml。chapter2.mxml 的代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; private var rtmpURL:String="rtmp://localhost/chapter2"; private var conn:NetConnection=new NetConnection(); private var isConnectSuccess:Boolean=false; private var responder:Responder=new Responder(resultFun); private function resultFun(object:String):void{ trace(object); result.text=object.toString(); } private function clickConnect(e:MouseEvent):void{ conn.objectEncoding = ObjectEncoding.AMF0; conn.addEventListener(NetStatusEvent.NET_STATUS,netStatus); conn.connect(rtmpURL); } private function click(e:MouseEvent):void{ invoke(); } private function invoke():void{ if(isConnectSuccess){ conn.call("change",responder,str.text);//change 是服务器端方法名称 }else{ Alert.show("还没连接到服务器"); } } private function netStatus(e:NetStatusEvent):void{ trace(e.info.code); if(e.info.code=="NetConnection.Connect.Success"){ isConnectSuccess=true; } } ]]> </fx:Script> <mx:Button x="224" y="175" label="调用服务器方法" click="this.click(event)"/> <mx:TextInput x="129" y="145" id="str" width="212"/> <mx:Label x="129" y="119" text="显示从服务器端返回的字符" id="result" width="160" fontSize="12"/> <mx:Button x="129" y="175" label="连接服务器" click="this.clickConnect(event)"/> </s:Application>3.部署运行程序 进入red5 的安装目录下的webapps 下,复制test 文件夹,把复制的文件夹改名为chapter2, 删除chapter2WEB-INF 目录下的文件夹。 把服务器项目下的classes 目录下的文件夹first 拷贝到chapter2WEB-INF 下。 把red5-web.properties 中的/test 替换为/chapter2。 把red5-web.xml 中的<bean id="test.service" class="org.red5.server.webapp.test.TestService" singleton="true" lazy-init="default" autowire="default" dependency-check="default" /><bean id="echo.service" class="org.red5.samples.services.EchoService" singleton="true" lazyinit=" default" autowire="default" dependency-check="default" />删除。 把org.red5.server.webapp.test.Application 替换为first.Application。 把web.xml 中的<param-value>/test</param-value> 替换为<param-value>/chapter2</paramvalue> 把<taglib> <taglib-uri>/ tlds/c</taglib-uri><taglib-location>/WEB-INF/tlds/c.tld</taglib-location> </taglib>删除 注意:webapps 下的文件夹名chapter2,red5-web.properties 中的chapter2,web.xml中的chapter2 要保持相同,如果一个改了,其他的也改成相同的,所有以后的工程都这样。 重新启动red5 在flexbuilder3 中选择运行菜单中的运行项运行chapter2。在文本框里输入字符串,点击连 接按钮,然后点击调用方法按钮。上面如果显示出输入框里的字符串的大写表示运行正常。 服务器端类有俩个方法,appConnect 类从ApplicationAdapter 继承来,当flash 连接时触发, 可以返回true 或false。True表示接受客户端的请求,false 表示拒绝客户端的请求。如果拒绝那么以后 flash 和服务器端的交互服务器都不会理会,所以当想拒绝某些ip 的请求时只需有在用户连接时检查它的ip 是否在拒绝ip 之内,如果在就返回false,那样就可以拒之门外了。change 是自己定义的,客户可以直 接调用的一个远程方法。作用是把客户传入的参数变成大些后返回,此处目的在于运行一个red5 和flex 交互的过程,并没有检查传入的参数是否有大写或都已经是大写。 客户端的代码稍多些,位于<mx:Script><![CDATA[ ]]></mx:Script>之外的是图形界面的 代码,包括俩个按钮,一个输入框,一个显示文本,这就不详细讲解了,注意给按钮添加事件监听器。过 程是这样的,用户点击连接,按钮的监听器clickConnect响应,conn.connect(rtmpURL)连接到服务 器,在服务器和客户端建立一条信息交流的通道。当这条通道打通时netStatus 执行,把是否是打通的开 关isConnectSuccess 设置为通的。当用户再点击调用按钮时,通过这条通道调用服务器端的方法 conn.call("c hange",str.text) 。传给服务器字符串str.text,当服务器端方法执行完后把返 回值给responder 定义时的方法resultFun,这样一个客户端与服务器交互的过程完成。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |