加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,这样一个客户端与服务器交互的过程完成。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读