red5的第一个程序

第一个程序的运行是学习的莫大回报,也是继续下面学习的关键,只有顺利的运行了第一个程序才会
更加信心百倍的去学习更深一步的知识。
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,
删除chapter2\WEB-INF 目录下的文件夹。
把服务器项目下的classes 目录下的文件夹first 拷贝到chapter2\WEB-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",responder,str.text) 。传给服务器字符串str.text,当服务器端方法执行完后把返
回值给responder 定义时的方法resultFun,这样一个客户端与服务器交互的过程完成。








你可能感兴趣的:(eclipse,function,Flex,服务器,application,flexbuilder)