当前位置:文档之家› red5入门教程

red5入门教程

red5入门教程
red5入门教程

简介:

在flex,java盛行天下时red5把二者连为一体成为更强的强者,为即时通信,流媒体开发,网络在线游戏提供了一个简单易行的方案。越来越多的公司把这个方案当成了首先,熟悉相关技术的人才的缺少也就成了发展的障碍,而相关资料的奇缺成了技术人员成长的障碍。本书注重实用,着眼入门,用大量实际的例子力求带领您进入flex,red5结合开发的天堂。没一个列子都是精心挑选,每一个列子都代表着一个知识点,每一个列子都将成为您以后项目的一部分。当然这是入门级别的书籍,不可能把所有的相关知识都讲到,

java,flex,spring,mina等等等等都red5相关,如果要对每一个点讲解那将是一个系列,而不是一本书。为了突出重点,本书只讲解把这些联系起来的纽扣red5,并讲解如何利用red5开发项目。

内容包括red5的安装,red5开发中各种概念,各种问题的解决方案,开发工具的使用等等,但有详有略,如工具的使用只讲解了书本中需要用到的相关知识。最后书本还有数个完整的列子,也是实际开发中常用的列子,如聊天程序,播放视频程序。

目录:

一.Red5介绍及安装:

Red5介绍

安装red5

二.编写运行第一个程序

编写服务器端

编写客户端

运行自己编写的程序

三.远程调用

客户端调用服务器端方法

Red5调用客户端方法

遍历所有连接到服务器端的用户

好友上线通知

四.sharedObject共享对象

sharedObject介绍

游戏中移动同步的原理和简单实现1

五.服务器执行计划

六.录制播放视频

播放服务器端视频

录制视频

设置视频保存位置

七.利用scope,room管理客户端

八.视频播放程序

九.简单聊天程序

附录:开发工具的使用

一.RReedd55介绍及安装

1.Red5介绍

Red5是一个采用Java开发开源免费的的Flash流媒体服务器,功能和Adobe的fms (FlashMedia

Server)相同,可以上官方网站https://www.doczj.com/doc/f718983231.html,/red5免费下载并使用。它支持把音频(MP3)

和视频(FLV)转换成播放流,在下载的同时播放流;录制客户端播放流(只支持FLV),把摄像头,麦

克风等传入的视频音频录制保存到服务器;共享对象;现场直播流发布;远程调用。Red5使用RSTP作为

流媒体传输协议。

Red5的功能使其在许多领域得到应用。如视频播放网站,远程教育,视频会议程序,聊天程序,网络

游戏等等。

免费开源使软件更加容易扩展,下载后你可以对源代码进行修改;更加经济,比起fms 高昂的费用red5

能为一般的应用节约大笔费用;服务器端的java语言比起fms服务器端的actionscript2语言更加面向对

象更加成熟。这使得red5还没到版本1就已经红遍世界。

2.red5 安装

第一步上https://www.doczj.com/doc/f718983231.html,下载jdk6并安装。如果不是安装在默认路径请设置classpath和path。设

置classpath和path的方法请参考其他java的资料。

第二步上https://www.doczj.com/doc/f718983231.html,/red5下载Red5v0.7.0Final的window安装版。点击下载到

的exe文件即开始安装,安装过程中选择要把red5安装到的目录。安装结束后打开浏览器输入

http://localhost:5080/如果能打开显示“Red5TestPage”表示安装成功。安装成功后可以运行查看

red5自带的例子。

第三步red5的启动和关闭。安装版的red5默认情况下会在计算机启动时启动,如果想关闭自启动可以

右击我的电脑->管理->服务和程序,找到red5的那项把启动方式的自动启动改为手动或其他的。更改了

启动方式后可以找到red5的安装目录下的wrapper目录下的Red5.bat文件,双击即可启动,这样可以

从窗口看到客户端连接的情况。关闭窗口即可关闭red5,也可以双击StopRed5-NT.bat关闭服务程序。

二.编写运行第一个程序

第一个程序的运行是学习的莫大回报,也是继续下面学习的关键,只有顺利的运行了第一个程序才会

更加信心百倍的去学习更深一步的知识。

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。类的代码如下:

packagefirst;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

publicclassApplicationextendsApplicationAdapter{

publicbooleanappConnect(IConnectionconn,Object[]args){

System.out.println("连接");

returntrue;

}

publicStringchange(Stringstr){

System.out.println("客户端调用服务器");

returnstr.toUpperCase();//传入的字符串转换成大写后返回

}

}

2.编写客户端

打开flexbuilder3 新建flex工程(具体flexbuilder的使用请参考附录),名字取名为chapter2。打开项目中chapter2.mxml。chapter2.mxml的代码如下:

fontSize="12"backgroundGradientAlphas="[1.0,1.0]"

backgroundGradientColors="[#FDF9F9,#FDF9F9]"width="442"height="344">

import mx.controls.Alert;

privatevarrtmpURL:String="rtmp://localhost/chapter2";

privatevarconn:NetConnection=newNetConnection();

privatevarisConnectSuccess:Boolean=false;

privatevarresponder:Responder=newResponder(resultFun); privatefunctionresultFun(object:String):void{

trace(object);

result.text=object.toString();

}

privatefunctionclickConnect(e:MouseEvent):void{

conn.addEventListener(https://www.doczj.com/doc/f718983231.html,_STATUS,netStatus);

conn.connect(rtmpURL);

}

privatefunctionclick(e:MouseEvent):void{

invoke();

}

privatefunctioninvoke():void{

if(isConnectSuccess){

conn.call("change",responder,str.text);//change是服务器端方法名称}else{

Alert.show("还没连接到服务器");

}

}

privatefunctionnetStatus(e:NetStatusEvent):void{

trace(https://www.doczj.com/doc/f718983231.html,.code);

if(https://www.doczj.com/doc/f718983231.html,.code=="NetConnection.Connect.Success"){

isConnectSuccess=true;

}

}

]]>

3.部署运行程序

进入red5的安装目录下的webapps下,复制test文件夹,把复制的文件夹改名为chapter2,删除chapter2\WEB-INF目录下的文件夹。

把服务器项目下的classes目录下的文件夹first拷贝到chapter2\WEB-INF下。

把red5-web.properties中的/test替换为/chapter2。

把red5-web.xml 中的

id="echo.service" class="org.red5.samples.services.EchoService" singleton="true" lazy-

init="default"autowire="default"dependency-check="default"/>删除。

把org.red5.server.webapp.test.Application替换为first.Application。

把web.xml中的/test替换为/chapter2

/tlds/c/WEB-INF/tlds/c.tld 删除

注意: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

交互的过程,并没有检查传入的参数是否有大写或都已经是大写。

客户端的代码稍多些,位于之外的是图形界面的

代码,包括俩个按钮,一个输入框,一个显示文本,这就不详细讲解了,注意给按钮添加事件监听器。过

程是这样的,用户点击连接,按钮的监听器clickConnect响应,conn.connect(rtmpURL)连接到服务

器,在服务器和客户端建立一条信息交流的通道。当这条通道打通时netStatus执行,把是否是打通的开

关isConnectSuccess设置为通的。当用户再点击调用按钮时,通过这条通道调用服务器端的方法

conn.call("change",responder,str.text)。传给服务器字符串str.text,当服务器端方法执行完后把返

回值给responder定义时的方法resultFun,这样一个客户端与服务器交互的过程完成。

三.远程调用

通过red5服务器端和客户端可以直接通过方法调用来交互,这是非常方便的(想想你在一个类里面方法调用发方便性吧),服务器调可以用客户端的方法,客户端也可以调用服务器端的方法。其实上面的例子就是通过方法调用实现的。

1.客户端调用服务器端方法

通过red5可以从客户端直接调用服务器上java编写的方法。调用时指明被调用的方法名称,如果有返回值则需要指明返回值处理的responder,如果被调用的方法有参数则需要

"change"

"change"

传入参数。可以引用第一章的例子,conn.call(""cchhaannggee"",responder,str.text);

public

public

表示客户端调用服务器端的名称为change的方法,查看java中change的定义ppuubblliicc String

change(String str){//函数体}发现参数是java 中String 类型的;调用时传入的str.text是actionscript中String类型;假如change有多个入口参数,则可以把参数列在str.text后面,并用'',"隔开。返回值由responder处理,change返回值是String类型的,要求responder定义时的函数resultFun的入口参数是String类型。

调用过程中需要注意的是参数类型的对应。具体可以看下列表

Java actionscript

null null

int/float Number

double Double

boolean Boolean

String String

List Array

Map Object

Bean Object

表说明假如java传给flash的参数是自定义Bean类型时,客户端接收到的是Object类型当被调用的方法没有返回值时把responder设置为null 。具体怎么实现就不再雷述,请看第二章的例子。

2.服务器调用客户端方法

不带返回的调用

新建eclipse 工程chapter3,并建立包first,在包里新建一个类Application 并继承ApplicationAdapter。Application到代码如下:

packagefirst;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

import org.red5.server.api.service.IServiceCapableConnection;

publicclassApplicationextendsApplicationAdapter{

@Override

publicbooleanappConnect(IConnectionarg0,Object[]arg1){

//TODOAuto-generatedmethodstub

callClient(arg0);

returntrue;

}

privatevoidcallClient(IConnectionconn){

if(conninstanceofIServiceCapableConnection){

IServiceCapableConnectionsc=(IServiceCapableConnection)conn;

sc.invoke("clientMethod",newObject[]{"One",1});

}

}

}

复制webapps下的chapter2文件夹,并改名为chapter3,把工程下class目录下的first拷贝覆盖以前

的first,把red5-web.properties 中的/chapter2,替换为/chapter3。把web.xml中的/chapter2替换为/chapter3

重启red5。

新建chapter3客户端项目,chapter.mxml代码如下:

fontSize="12"backgroundGradientAlphas="[1.0,1.0]"

backgroundGradientColors="[#FDF9F9,#FDF9F9]"width="442"height="344">

import mx.controls.Alert;

privatevarrtmpURL:String="rtmp://localhost/jiaocheng";

privatevarconn:NetConnection=newNetConnection();

privatevarclient1:Object=newObject();

privatefunctionclickConnect(e:MouseEvent):void{

client1.clientMethod=this.clientMethod;

conn.client=this.client1;

conn.addEventListener(https://www.doczj.com/doc/f718983231.html,_STATUS,netStatus);

conn.connect(rtmpURL);

}

privatefunctionnetStatus(e:NetStatusEvent):void{

}

privatefunctionclientMethod(str:String,num:Number):void{

Alert.show("接收"+str+(num+1));

}

]]>

点击调试程序运行客户端,然后点击连接按钮可以发现输出“接收One2”表示服务器调用客户端到方法成功。

服务器端还是只有俩个方法,当客户端连接时服务器调用appConnect,在appConnect里

调用callClient。在callClient中服务器调用客户端的方法clientMethod,并传给客户端俩个参数,一个

字符类型,一个数字类型。只有IServiceCapableConnection 类型的连接才可以调用客户端方法,所以

要先对连接类型进行强制转换。

再看客户端,有三个方法,因为不需要处理连接状态的变化事件所以用个空方法以便简单突出重点。用

户点击按钮连接,调用clickConnect方法连接服务器。还有一个方法给服务器调用的,这个方法附着在

conn.client上。因为ActionScript3中NetConnection是封闭的,无法直接把方法附着在其上,但他

的一个属性client是Object类型的,是动态的。

服务器不但可以调用客户端的方法,还可以把客户端方法处理的值返回给服务器。

理服务器调用客户端方法有返回值就就必须实现IPendingServiceCallback接口,并调用方式改为sc.invoke("clientMethod", new Object[]{"One", 1},this);this 是任意一个实现IPendingServiceCallback接口的类,在接口的resultReceived方法中处理返回值。现在把上面的类改成下面样子

packagefirst;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

import org.red5.server.api.service.IPendingServiceCall;

import org.red5.server.api.service.IPendingServiceCallback;

import org.red5.server.api.service.IServiceCapableConnection;

publicclassApplicationextendsApplicationAdapterimplementsIPendingServiceCallback{

@Override

publicbooleanappConnect(IConnectionarg0,Object[]arg1){

callClient(arg0);

returntrue;

}

privatevoidcallClient(IConnectionconn){

if(conninstanceofIServiceCapableConnection){

IServiceCapableConnectionsc=(IServiceCapableConnection)conn;

sc.invoke("clientMethod",newObject[]{"One",1},this);

}

}

publicvoidresultReceived(IPendingServiceCallarg0){

System.out.println("来自客户端到返回:"+arg0.getResult());

}

}

把客户端的

privatefunctionclientMethod(str:String,num:Number):void{

Alert.show("接收"+str+(num+1));

}

改成

privatefunctionclientMethod(str:String,num:Number):String{

Alert.show("接收"+str+(num+1));

Return"客户端返回来的字符串";

}

测试可以从red5的框里看到输出“客户端返回来的字符串"

3.遍历所有连接到服务器端的用户

遍历所有链接到服务器的客户端是常常的事,如好友上线,则要及时把这个消息通知给在线的人员。

Red5通过IConnection.getscope()得到所在scope,通过scope可以得到连接到这个scope 的所有客户的连接。在得到连接后就可以通过连接调用客户端方法。如调用每个客户端的clientMethod方法一遍可以把服务器改成下面的样子

packagechapter2;

import java.util.Iterator;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

import org.red5.server.api.IScope;

import org.red5.server.api.service.IPendingServiceCall;

import org.red5.server.api.service.IPendingServiceCallback;

import org.red5.server.api.service.IServiceCapableConnection;

publicclassApplicationextendsApplicationAdapterimplementsIPendingServiceCallback{

@Override

publicbooleanappConnect(IConnectionarg0,Object[]arg1){

this.callEvery(arg0.getScope());

returntrue;

}

privatevoidcallEvery(IScopescope){

Iteratorit=scope.getConnections();

while(it.hasNext()){

this.callClient(it.next());

}

}

privatevoidcallClient(IConnectionconn){

if(conninstanceofIServiceCapableConnection){

IServiceCapableConnectionsc=(IServiceCapableConnection)conn;

sc.invoke("clientMethod",newObject[]{conn.getSessionId(),1},this);

}

}

publicvoidresultReceived(IPendingServiceCallarg0){

System.out.println("来自客户端到返回:"+arg0.getResult());

}

}

把服务器端的class覆盖以前的文件,运行客户端可以看到有一个新的客户连接时每个在线的客户端会弹

出新上线用户的用户id

shareObject

shareObject

四.sshhaarreeOObbjjeecctt共享对象

共享对象

游戏中同步的原理

同步的简单实现

共享对象分为本地和远程俩种,本地的可以看adobe官方文档,很详细,这里就讲解远程的。远程共

享对象是供指定客户端群共有的数据。就如你家的钱包是你和你爱人共有的一样(某些特殊除外),可以随

便花,一个人少了,代表另一个也少了,但是也有限制,不是每个人都可以花(我就不能花你家钱包的钱),

只有指定有权限的人才可以。要花钱先得获得钱包,然后还要打开钱包。共享对象为数据共

享提供了很大

的方便,因为数据改变时会在每个客户端同步而不用人去干预太多。

下面以一个移动同步的例子讲解,效果是移动方块,所有其他浏览器中的的方块都同时改变位置。

新建服务器项目chapter4,并新建类,代码如下

packagefirst;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

publicclassApplicationextendsApplicationAdapter{

@Override

publicbooleanappConnect(IConnectionarg0,Object[]arg1){

returntrue;

}

}

修改把red5-web.xml,web.xml,red5-web.properties中的chapter3替换为chapter4重启red5.

新建flex应用代码如下

backgroundColor="#DA4040"

mouseDown="this.mouseDown(event)"mouseUp="this.mouseUp(event)"

mouseMove="this.mouseMove(event)">

import mx.controls.Alert;

privatevarrtmpURL:String="rtmp://localhost/jiaocheng";

privatevarconn:NetConnection=newNetConnection();

privatevarisConnectSuccess:Boolean=false;

privatevarso:SharedObject;

privatevarisDown:Boolean=false;

privatefunctionclickConnect(e:MouseEvent):void{

if(!isConnectSuccess){

conn.addEventListener(https://www.doczj.com/doc/f718983231.html,_STATUS,netStatus);

conn.connect(rtmpURL);

}

}

privatefunctionmouseDown(e:MouseEvent):void{

rect.startDrag();

isDown=true;

}

privatefunctionmouseUp(e:MouseEvent):void{

rect.stopDrag();

isDown=false;

}

privatefunctionmouseMove(e:MouseEvent):void{

if(isDown){

so.setProperty("x",rect.x);

so.setProperty("y",rect.y);

}

}

privatefunctionnetStatus(e:NetStatusEvent):void{

trace(https://www.doczj.com/doc/f718983231.html,.code);

if(https://www.doczj.com/doc/f718983231.html,.code=="NetConnection.Connect.Success"){

isConnectSuccess=true;

}

so=SharedObject.getRemote("point",conn.uri,true);

so.connect(conn);

so.addEventListener(SyncEvent.SYNC,syncro);

}

privatefunctionsyncro(e:SyncEvent):void{

rect.x=so.data.x;

rect.y=so.data.y;

}

]]>

运行俩个flash客户端,在一个里面拖动框,看另一个框是否同步改变位置,如果是则正常。shareObject应用时客户端要先用SharedObject.getRemote("point",conn.uri,true)获取服务器端的一个共享对象;然后用so.connect(conn)连接对象来同步;最后通过so.addEventListener(

SyncEvent.SYNC,syncro)可以响应共享对象的变化。服务器只响应客户端的连接,没有任何其他的代码。

如果要在服务器端处理共享对象则通过服务器端的ISharedObject接口实现。为了演示服务器端对共享

对象的控制把服务器端的代码改成如下

packagechapter4;

import org.red5.server.adapter.ApplicationAdapter;

import org.red5.server.api.IConnection;

import org.red5.server.api.IScope;

import org.red5.server.api.so.ISharedObject; publicclassApplicationextendsApplicationAdapter{

@Override

publicbooleanappConnect(IConnectionarg0,Object[]arg1){

returntrue;

}

@Override

publicbooleanappStart(IScopearg0){

System.out.println("appStart程序启动");

this.createSharedObject(arg0,"point",true);

ISharedObjectso=this.getSharedObject(arg0,"point");

if(so!=null)

so.addSharedObjectListener(newShareObjectListener());

else

System.out.println("point 是null");

returntrue;

}

}

并添加类

packagechapter4;

import java.util.List;

import java.util.Map;

import org.red5.server.api.IAttributeStore;

import org.red5.server.api.so.ISharedObjectBase;

import org.red5.server.api.so.ISharedObjectListener; publicclassShareObjectListenerimplementsISharedObjectListener{ publicvoidonSharedObjectClear(ISharedObjectBasearg0){

System.out.println("onSharedObjectClear");

}

publicvoidonSharedObjectConnect(ISharedObjectBasearg0){ System.out.println("onSharedObjectConnect");

}

publicvoidonSharedObjectDelete(ISharedObjectBasearg0,Stringarg1){ System.out.println("onSharedObjectDelete");

}

publicvoidonSharedObjectDisconnect(ISharedObjectBasearg0){

System.out.println("onSharedObjectDisconnect");

}

publicvoidonSharedObjectSend(ISharedObjectBasearg0,Stringarg1,

Listarg2){

System.out.println("onSharedObjectSend");

}

publicvoidonSharedObjectUpdate(ISharedObjectBasearg0,

IAttributeStorearg1){

System.out.println("onSharedObjectUpdate");

}

publicvoidonSharedObjectUpdate(ISharedObjectBasearg0,

Maparg1){

System.out.println("onSharedObjectUpdate");

}

publicvoidonSharedObjectUpdate(ISharedObjectBasearg0,Stringkey,

Objectvalue){

System.out.println("更新共享对象的值"+key+":"+value); }

excel表格的各函数常用函数

excel表格的各函数的基本操作 常用函数如下: 1、SUM()求和、总分函数 例:=SUM(B2:B5) 2、A VERAGE()求平均函数 例:=A VERAGE(B2:B5) 3、MIN()求最小值函数 例:=MIN(B2:B5) 4、MAX()求最大值函数 例:=MAX(B2:B5) 5、COUNTIF()求条件统计函数( 例:=COUNTIF(B7:B33,“>=90”) 6、COUNT()求统计函数 例:=COUNT(B7:B33) 7、IF()求逻辑函数 例:=IF(G7>=90,“优秀”,IF(G7>=80,“良好”,IF(G7)>=70,“中等”,IF(AND(G7<70,G7>0),“差生”,“没参考”)))) 8、RANK()求名次函数 例:=RANK(G7,$G$7:$G$33) 9、NOW()求电脑现在日期 例:=NOW() 10、求“性别”函数 例:=IF(MOD(MID(B6,15,1),2)=0,"女","男") 11、求“出生日期”函数 例:=CONCATENA TE(MID(B6,7,2),"-",MID(B6,9,2),"-",MID(B6,11,2)) 12、求“年龄”、“工龄”函数 例:=DATEDIF(E6,NOW(),"Y") 13、求“等级”函数 例:=IF(C6="基础班","入门级",IF(OR(C6="AUTOCAD班",C6="PHOTOSHOP",C6="CORELDRAW"),"平面设计级",IF(C6="综合班","综合办公应用级",IF(C6="OFFICE套班","办公应用级","网络设计级")))) 14、SUNIF()条件求和函数(根据指定的条件求和) 例:=SUMIF(B7:B33,">=100") 例:=SUMIF(C7:C36,"=人事",D7:D36)

openmeetings二次开发详解(本人都已实践成功)

openmeetings十万个如何(不断更新) 事先声明,我用的是最新的openmeetings源码(包括客户端与服务端),最新版本openmeeting是有多种风格 默认为蓝色 一.如何绕过登陆 找到base\auth\checkLoginData.lzx,在第一个oninit加上this.login() this.pressEnter = new LzDelegate(this, "login"); lz.Keys.callOnKeyCombo(this.pressEnter, ["enter"]); lz.Focus.setFocus(https://www.doczj.com/doc/f718983231.html,ername,true); this.login(); 这样,一进入登陆界面就会自动登陆. 二.如何传参数给openmeetings 如http://localhost:5080/openmeetings/index.jps?userName=土匪&pwd=123 可以修改index.jsp,在openmeetings for java的源码找到它 var so = new SWFObject("main.lzx.swf8.swf", "lzapp", "100%", "100%", "8", "#ffffff"); so.addParam("quality", "high"); so.addParam("id", "lzapp"); so.addParam("allowScriptAccess", "always"); so.addParam("scale", "noscale"); so.addVariable("yxUserName",'<%=request.getParameter("userName")%>' ); so.addVariable("yxUserPass",'<%=request.getParameter("pwd")%>'); so.write("flashcontent"); 以上so.addVariable是我加的,就是把传过来的用户名与密码加入到openlaze 中,这里的yxUserName与yxUserPass在 openLaze中是全局变量

图书管理系统的C#代码(完整版).docx

. C# 代码清单 共 1 个项目,包含 5 个类。 项目: librarysystem 类 :Program.cs Readers.cs Manage.cs Menu.cs Publications.cs 主类代码: namespace librarysystem { ///

///类名: Program ///功能:项目主类 ///时间: 2015-11-19 /// class Program { static void Main( string [] args) { Menu meu = new Menu (); meu.ShowMainMenu(); Console .ReadLine(); } }

} 出版物类代码: namespace librarysystem { ///

///类名: Publications ///功能:馆藏出版物信息 ///时间: 2015-11-19 /// class Publications { /* 出版物编号 */ private string PublicationISBN; public string PublicationIsbn { get { return PublicationISBN; } set { PublicationISBN =value ; }

} /* 出版物名称 */ public string PublicationName; /* 出版物作者或出版机构*/ public string PublicationAuthor; /* 出版物在架状态 */ public bool PublicationStatus; /* 出版物类型 */ public string PublicationType; public Publications() { } public Publications( string PublicationISBN, string PublicationName, string PublicationAuthor,string PublicationType, bool PublicationStatus) { this . PublicationISBN = PublicationISBN; this .PublicationName = PublicationName; this .PublicationAuthor = PublicationAuthor; this .PublicationType = PublicationType; this .PublicationStatus = PublicationStatus; } }

中文版word基础教程

W o r d 2003基础教程 编 撰 花 椒 文 刀 版权归属:中国盲文出版社信息无障碍中心盲人挚友聊天室 前 言 结合阳光读屏软件强大的Word 朗读功能, 由信息无障碍中心开办的于2008年11月至 2009年3 月,推出在线《Word2003基础讲座》。同期,我们将讲座内容编纂成册,免费提供给 阳光软件的广大用户,以便查阅。 本教程用Word2003编写, 您可以通过单击目录快速跳转到需要查阅的文本,具体操作方法是:用上下光标逐行朗读目录,听到您想查阅的条目后,按下 Ctrl+小键盘的斜杠键,这样,光标会自动跳转到目录对应的文本,以方便您的查阅,同时,在阅读过程中,教程所提及的所有操作,您均可在当前窗口尝试,当然,为了保持教程的完整,建议您在关闭本 教程时选择不保存修改。 本教程由阳光软件免费提供,版权归属中国盲文出版社信息无障碍中心盲人挚友聊天室, 请勿用于商业用途,违者必究。

目录 第一章 初识中文版Word2003 中文版word2003是微软公司推出的中文版office2003软件套装中的重要组成部分,它具有 强大的文本编辑和文件处理功能,是实现无纸化办公和网络办公不可或缺的应用软件之一。 第一节安装、启动和退出程序 一、安装程序 安装word2003和安装其它软件并无二致,需要说明一下的是光盘版的安装。当您将中文版 office2003光盘放入光驱后,请不要自动播放,因为自动播放会弹出图形化的安装界面,读 屏软件无法操作。您可以在插入光盘后,打开“我的电脑”找到CD驱动器,application键 弹出快捷菜单,通过“打开(O)菜单”来打开光盘,然后在列表中选中office文件夹,打开 以后,列表中出现几个文件夹,由于版本不同,文件夹数量和名称可能会略有区别,不过没 关系,在这些文件夹中寻找setup.exe并回车执行,您就能顺利地用键盘完成安装操作了。 二、启动程序 按下Windows键弹出“「开始」菜单”,展开“所有程序(P)菜单”后。上下光标到 “MicrosoftOffice子菜单”,右光标展开该子菜单后,上下光标找到 “MicrosoftOfficeWord2003菜单”回车即可启动Word程序。另外,当您在资源管理器中选 择任意一个后缀名为.doc的文档回车时,计算机也会为您启动word程序,同时打开您选中 的文档。 三、退出程序 在程序窗口按下快捷键:“Alt+F4”是退出程序最简便的方法。当然您还可以在程序窗口按下 Alt键激活菜单栏,下光标展开“文件(F)子菜单”并找到到“退出(X)菜单”回车,或在程 序窗口按下“Alt+空格”弹出控件菜单,上下光标找到“关闭(c)菜单”回车即可退出程序。

excel函数公式图文说明教程

excel函数公式实例教程 excel教程珍藏版,简单明了,包你学会,欢迎转载! 教程在陆续上传添加中,敬请期待! 1、PERCENTILE函数实例:求百分比数值点 Excel中PERCENTILE函数实例:求百分 比数值点 [日期:2010-08-09] 来源:IT部落窝作者:IT部落窝阅读:8560次[字体:大中小] Excel中PERCENTILE函数的用法是:返回区域中数值的第 K 个百分点的值。 PERCENTILE函数实例:求百分比数值点 下面是IT部落窝某几天的一个流量表,详见下图。现在要统计出90%、80%、70%、60%、50%对应的百分比数值点。我们使用PERCENTILE函数设计公式来求取。 操作步骤如下:

第一步,选中B17单元格,输入公式:=PERCENTILE(C2:C14,0.9),确定,得到90%处的对应的百分比数值点。 第二步,选中B18单元格,输入公式:=PERCENTILE(C2:C14,0.8),确定,得到80%处的对应的百分比数值点。 第三步,选中B19单元格,输入公式:=PERCENTILE(C2:C14,0.7),确定,得到70%处的对应的百分比数值点。 第四步,选中B20单元格,输入公式:=PERCENTILE(C2:C14,0.6),确定,得到60%处的对应的百分比数值点。 第五步,选中B21单元格,输入公式:=PERCENTILE(C2:C14,0.5),确定,得到50%处的对应的百分比数值点。 2、frequency函数实例:统计一组数据出现的次数

frequency函数实例:统计一组数据出 现的次数 [日期:2010-08-06] 来源:IT部落窝作者:IT部落窝阅读:5390次[字体:大中小] 下表中统计了公司员工被投诉的记录。问题是统计出指定的员工编号被投诉的出现次数。 我们使用excel中frequency函数可以实现出现次数统计。frequency函数用于计算数值在某个区域内的出现频率次数,然后返回一个垂直数组。 操作步骤如下: 首先在C列建立需要参与统计投诉出现次数的员工编号,然后选中D5:D8单元格区域,在编辑栏输入公式:=FREQUENCY(B2:B11,C5:C8),然后按下“Ctrl+Shift+Enter”组合键,即可一次性统计出各个编号在B2:B11单元格区域中出现的次数。 3、frequency函数用法介绍 Excel中frequency函数用法介绍 [日期:2010-08-06] 来源:IT部落窝作者:IT部落窝阅读:6622次[字体:大中小]

图书管理系统的C#代码(完整版)

C#代码清单 共1个项目,包含5个类。 项目:librarysystem 类: Program.cs Readers.cs Manage.cs Menu.cs Publications.cs 主类代码: namespace librarysystem { ///

///类名:Program ///功能:项目主类 ///时间:2015-11-19 /// class Program { static void Main(string[] args) { Menu meu = new Menu(); meu.ShowMainMenu(); Console.ReadLine(); } } } 出版物类代码: namespace librarysystem { /// ///类名:Publications ///功能:馆藏出版物信息 ///时间:2015-11-19 /// class Publications { /*出版物编号*/ private string PublicationISBN; public string PublicationIsbn { get { return PublicationISBN; }

{ PublicationISBN = value; } } /*出版物名称*/ public string PublicationName; /*出版物作者或出版机构*/ public string PublicationAuthor; /*出版物在架状态*/ public bool PublicationStatus; /*出版物类型*/ public string PublicationType; public Publications() { } public Publications(string PublicationISBN,string PublicationName,string PublicationAuthor,string PublicationType,bool PublicationStatus) { this. PublicationISBN = PublicationISBN; this.PublicationName = PublicationName; this.PublicationAuthor = PublicationAuthor; this.PublicationType = PublicationType; this.PublicationStatus = PublicationStatus; } } } 读者类代码: namespace librarysystem { ///

///类名:Readers ///功能:已获取权限读者的信息 ///时间:2015-11-19 /// class Readers { private string ReaderID; public string ReaderId { get { return ReaderID; } set

Scratch2.0入门中文使用教程

儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.doczj.com/doc/f718983231.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

外汇交易MT4编程入门自定义指标的结构

外汇交易MT4编程入门:自定义指标的结构 MT4自定义指标一般由四个部分构成:(1)文件头部(2)参数、变量和数组的定义(3)初始化函数init()(4)主函数start()一、文件头部,也称为预处理程序预处理程序以“#”开头,行尾无语句结束符“;”常用的预处理程序有:1、#property indicator_chart_window把指标显示在主图。如:均线、SRA等类指标用到此语句2、#property indicator_separate_window把指标显示在副图。如:MACD、RSI、威廉等类指标用到此语句3、#property indicator_buffers 3显示3根指标线4、#property indicator_color1 Red第1根指标线的颜色为Red5、#property indicator_width1 1第1根指标线的粗细分别为16、#property indicator_level1 0.00在0.00值位置横划1条虚线二、参数、变量和数组的定义全局性的参数、变量、数组在此定义,局部变量可在start()函数中定义三、初始化函数init()init()在自定义指标加载时运行一次。初始化函数的功能是“设置”。如果自定义指标需要划线,则必然用到此函数四、主函数start()当数据有变动时,start()就被触发。数据变动一次,start()就运行一次。自定义指标的编程主要依靠此函数进行。start()函数的作用主要是取值和给指标线赋值,报警也在此函数内发起。另外,还有一个反初始

化函数deinit()deinit()在自定义卸载时运行一次,可用以去除指标加载时init()所做的初始化操作。

EXCEL公式手册

这个东西其实是公司一个很老的培训资料,内容非常简单,说白了就是把Excel里按F1打开帮助都能找到的东西贴出来而已。这个东西的唯一价值,只是告诉你这些公式你可能会用得到,所以老手就不必看了,也不必喷了。我在原文的基础上添加了AVERAGEIF、AVERAGEIFS、SUMIFS、COUNTIFS和IFERROR函数(适用于2007以上版本)。 Contents Chapter 0:Updates内容更新 0.1 AVERAGEIF 0.2 AVERAGEIFS、SUMIFS、COUNTIFS 0.3 IFERROR Chapter 1:Text Functions文本函数 1.1 Concatenate 1.2 Exact 1.3 Upper 1.4 Lower 1.5 Left 1.6 Right 1.7 Len 1.8 Trim 1.9 Text 1.10 Substitute Chapter 2:LOOKUP查询函数 2.1 HLookup 2.2 VLookup 2.3 Lookup Chapter 3:Date and Time日期与时间函数 3.1 Today 3.2 Year

3.4 Day 3.5 Date 3.6 Time 3.7 Hour 3.8 Minute 3.9 Second Chapter 4:Math数学函数4.1 ABS 4.2 INT 4.3 PRODUCT 4.4 MOD 4.5 Rand 4.6 ROUND 4.7 ROUNDUP 4.8 ROUNDDOWN 4.9 SumIF 4.10 SumProduct 4.11 Trunc Chapter 5:Logical逻辑函数5.1 And 5.2 Not 5.3 Or 5.4 True 5.5 False 5.6 If Chapter 6:Financial财务函数6.1 PMT

Red5性能测试

Red5性能测试工具

1.修订记录 (1) 2.介绍 (1) 2.1目标(GOAL) (1) 2.2范围(SCOPE) (1) 3.推荐Red5服务器系统环境 (1) 4.测试工具 (1) 4.1技术背景 (1) 4.2界面 (2) 4.3技术细节 (3) 4.3.1参数介绍 (3) 4.3.2 2.0版本的特点 (4) 5.实测例子 (4) 5.1网络拓扑 (4) 5.2客户端截图 (5) 5.2.1发布端发布视频,名字为123 (5) 5.2.2 压力测试端 (6) 5.3服务器端性能指标截图 (7) 5.3.1 100用户 (8) 5.3.2 200用户 (8) 5.3.3 300用户 (9) 5.3.4 400用户 (9) 5.3.5 500用户 (10) 5.3.6 600用户 (10) 5.3.7 700用户 (11) 5.3.8 800用户 (11) 5.3.9 900用户 (12) 5.3.10 1000用户 (12) 5.3.11 1100用户 (12) 5.3.12 1200用户 (13) 5.3.13 继续增压的要求 (13) 6.备注 (14) 6.1高性能Red5完全解决方案(跨平台和集群技术) (14)

1.修订记录 2.介绍 2.1目标(GOAL) 实现Red5媒体服务器的性能测试工具 2.2范围(SCOPE) 3.推荐Red5服务器系统环境 ?硬件环境: Intel(R) Xeon(R)CPU E5506 @2.13GHz (2 处理器),内存8G ?网络环境: 1Gbps ?软件环境: OS:Red Hat Enterprise Linux Server release 5.6 (Tikanga) Java:Java SE Development Kit 7 Update 17,x64 Red5:mh2.0.1,基于Red5 1.0深度定制 ?其他要求: 保证系统环境是干净的,例如需要先卸载掉原有的JDK、不需要的程序等; Red5 server应独立部署,不得和其他server共用同一台机器; 4.测试工具 4.1技术背景 流媒体服务器性能测试一般都采用如下三种方式: ●综合测试工具LoadRunner ●命令行测试工具 ●可视化测试工具 LoadRunner是综合性的测试工具,可以生成漂亮的测试图表,但是对rtmp协议的支持不是很好,有些版本需要安装插件; 命令行测试工具主要有开源项目flazr,但是缺点是没有可视界面,表达能力差,给客户做报告的时候资料也不够漂亮;

Web前端开发工程师技能列表

Web前端开发工程师技能列表 要打造一流的Web(https://www.doczj.com/doc/f718983231.html,/zt/webqianduan/)产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的”网页套接”是完全不够的。特此罗列了Web前端产品工程师所涉及的技能列表如下: 通过许多实际项目,个人认为一个完备的前端产品开发团队,必须拥有如下的人才配备,也希望大家补充: 团队全体成员达到所有技能中的a级标准 团队全体成员必须掌握两项技能中的b级标准,并保证所有的b级标准在该团队中有50%以上成员能达到 团队全体成员必须掌握一项技能中的c级标准,并保证所有的c级标准在该团队中有25%以上成员能达到 具体技能描述: 【必备】UserInterface PhotoShop/Fireworks Design

a –配合美工将草图形成具体的符合WebPage的设计 b –有快速制作分层高品质PSD、PNG的能力 c –能迅速将PSD、PNG的内容构思成div+css或者table等HTML代码 Flash Design a –基本动画效果 b –复杂的交互体系设计,了解第三方swf辅助设计软件 c –复杂的交互体系设计以及较强的对各类外埠资源(PNG、JPG、MP3、WAV 等)的整合能力。精通部分第三方辅助设计软件(AE、SwishMax、Swift3D等) 【必备】Browser-side (Web Application) XHTML/CSS a –基本的layout实现 b –严格跨平台的layout实现以 c –优雅的HTML code,尽可能符合标准并有SEO的考虑因素。在任何平台、浏览器下基本保持一致。不要求了解各种CSS的hacks,但要求知道遇到问题应该如何查阅资料以在第一时间内解决。能够为JavaScript开发人员提供最好操作的DOM结构,让JS开发人员在开发的时候认为”一切都已经准备就绪了”,而不是”捉襟见肘”。 JavaScript/Ajax/DOM a –基本的DOM操作,了解AJAX,可以实现数据通信 b –基本的DOM操作,能写高效率的OOP代码,以降低维护成本 c –基于需求,进行不同的开发,选择合适的框架,做到代码效率最高,用户体验最好,代码下载量最小,并且可以在单独甚至更多产品线中最大限度重用代码 Flash Developement a –基于Timeline的ActionScript操作,能实现简单交互 b –掌握a外,能实现数据层通信(与服务器以及本地SharedObject)

H265 HDMI高清视频编码器使用教程技术手册说明书

单路数字高清编码器H.265/H.264 X.Encoder 使 用 说 明 书 长沙航天和一电子设备厂

目录 前言 1. 环境配置 (6) 1.1. 硬件环境 (6) 1.2. 软件环境 (6) 1.2.1.登录设置后台 (6) 1.2.2.查看流地址 (7) 2. 编码设置 (9) 2.1. 编码设置 (9) 2.2. 音频设置 (12) 2.3. 高级设置 (12) 3. OSD设置 (13) 3.1. 码流OSD设置 (13) 3.2. LOGO上传 (14) 4. 系统设置 (14) 4.1. 网络设置 (14) 4.2. 密码设置 (15) 4.3. 串口透传 (15) 4.4. 系统更新 (16) 4.5. 恢复出厂设置 (16) 4.6. 重启 (17) 5. 场景应用 (17) 5.1. 少量用户场景 (17) 5.1.1.网页预览视频 (17) 5.1.2.VLC播放器播放视频 (19) 5.2. 本地多用户场景 (20) 5.3. 本地监控系统场景 (21) 5.4. 远程多用户场景 (23) 6. 常见问题解决 (25) 6.1. 不能访问编码器 (25) 6.2. VLC不能播放出视频 (28)

前言 感谢您选用长沙航天和一电子设备厂的产品。 本说明书详细介绍了产品的性能、安装及操作方法,无论您是第一次使用该产品,还是以前接触过很多类似产品,都必须在使用前仔细阅读本手册,并遵从所有操作及其它说明事项。 安全注意事项 ●在开启本设备前一定要阅读使用说明书。 ●绝对不要私自打开机盖,否则不予保修,另外触摸机内时有触电可能,十分 危险。 ●长期不使用本设备时,请一定要拔下电源插头,另外请不要使用破损的电源 插座,以免发生火灾和触电。电源插座不要用湿手触摸,有触电的可能。 ●不要将设备接近强磁场和强电场的环境。 ●拔掉连接导线时,应拔插头不要拉导线本身,不要带电热插拔HDMI线。 ●设备上不要放置过重或装有液体的物品。机内不得落入易燃物、金属物、液 体等,这些东西会损坏本设备。 ●为了防止雷电引起的损坏,请在避雷装置场合下使用本设备,这样可有效防 止雷电或电网波动造成损失。 产品功能及用途 长沙航天和一电子HY-8801BH单路HDMI数字高清编码器,支持1路HDMI高清信号输入,通过H.264或H.265视频编码和AAC+/AAC++/MP3音频编码形成TS复用IP数据流,支持TS、HLS、 RTSP 、UDP 、RTMP、FLV、 ONVIF 等协议进行传输;本设备支持OSD功能,可在每路视频码流(包括1路主码流和3路次码流)中分

Maya Mel基础教程(3)

Maya Mel基础教程(3) 1、了解脚本语言 编写脚本语言程序是产生Maya埋入式语言(MEL)脚本程序的过程。一个脚本语言程序是一个MEL指令或者MEL序列的集。通过产生脚本语言程序,你可以利用Maya的用户界面使执行任务自动化,可以获得”under the hood”访问Maya所有的各个部分,还可以对界面进行扩展和自定义。 2、设立脚本语言环境 为了设立脚本语言环境,需要考虑以下内容: ⑴、脚本语言文件 ⑵、建立脚本语言路径 ⑶、在脚本语言程序中使用程序 ⑴、脚本语言文件 一个MEL脚本文件(*.mel)是一个包含MEL指令、MEL程序或者二者都有的文件。典型地,是用一个MEL脚本文件执行一系列的指令。如,可以写一个脚本程序以产生一个墙形状的物体,然后再给它施加一个砖的纹理。 可以用一个文字编辑器写一个MEL脚本文件然后把它保存到磁盘的一个文件中。MEL脚本文件使用文件扩展名 .mel。可以把脚本文件用于不同的场景中和不同的工作期间中。当执行一个MEL脚本文件时,它并不变成为场景的一个部分,因此如果你要想重复它的作用时,应该每次都执行该脚本程序。 ⑵、建立脚本文件路径 在缺省状态下,Maya在你的scripts目录中查找MEL脚本文件。 在缺省状态下,这个目录定义在你的login名下。例子如下: (IRIX) ~elvis/maya/scripts (Windows NT) C:AwElvismayascripts 使你的脚本文件可以运行的最简单的方法是把它们放在上述路径里。 注意你的scripts目录缺省地包含了一些脚本文件。它们以menu_作为名字的开始,用于Maya内部。 你可以给MAYA用于查找脚本文件的缺省路径增加目录。 为脚本文件路径增加一个目录(在IRIX中): 1--在一个IRIX shell中,设立环境变量MAYA_SCRIPT_PATH给附加目录的路径。2--从这个shell启动MAYA。 为脚本文件路径增加一个目录(在Windows NT中): 1--使用Windows NT Explorer或者My Computer,显示Maya NT bin目录的内容。 缺省时是C:AwMayaX.X in。 2--双击MayaEnvironment.exe启动该程序。 这样显示出了你的home、project、plug-in、script和bitmap目录的路径。该路径包括在安装期间产生的缺省路径和你后来定义的任何路径。不能改变缺省路径。 对于plug-in、script和bitmap路径,用分号(;)分离路径,这些项可以定位。在这个窗口中禁止编辑路径。但你可以用以下的步骤代替。 重要事项: 如果你的计算机上安装了Maya NT的多个版本,你会看到一个版本的路径。版

EXCEL VBA方法参考手册

Excel VBA 学习资料 函 数 参 考 手 册

目录 一些对象的应用方法 (4) Add 方法 (5) Add方法(Dictionary) (6) Add 方法(Folders) (6) Assert 方法 (7) BuildPath 方法 (8) Clear 方法 (8) Close 方法 (9) Copy 方法 (10) CopyFile 方法 (10) CopyFolder 方法 (11) CreateFolder 方法 (12) CreateTextFile 方法 (13) Delete 方法 (14) DeleteFile 方法 (14) DeleteFolder 方法 (15) DriveExists 方法 (15) Exists 方法 (16) FileExists 方法 (16) FolderExists 方法 (17) GetAbsolutePathName 方法 (17) GetBaseName 方法 (18) GetExtensionName 方法 (18) GetFile 方法 (19) GetFileName 方法 (19) GetFolder 方法 (20) GetParentFolderName 方法 (20) GetSpecialFolder 方法 (21) GetTempName 方法 (22) Hide 方法 (22) Item 方法 (23) Items 方法 (24) Keys方法 (24) Move 方法 (25) Move 方法(UseForm) (25) 1、应用于 (25) 2、请参阅 (25) MoveFile 方法 (25) MoveFolder 方法 (26) OpenAsTextStream 方法 (27) OpenTextFile 方法 (28) Print 方法 (30)

red5入门

Red5入门 1、下载、安装JRE、Red5,二者都可以安装到有空格的目录下,这部分没啥好说的,我用 的版本分别是:Red5-0.7.0和Sun jdk1.6.0_12 2、到RED5的安装目录,找到doc/templates目录,该目录中存放了一个标准的RED5应用 程序模版myapp,将其复制到RED5安装目录中的webapps目录下,并改名为你喜欢的文件夹名,比如你要开发一个聊天的程序,那么可以把myapp改为myChat,这个名字就是以后你要连接的服务名了。 3、.在WEB-INF中新建一个文件夹src用来存放程序的源代码,新建一个classes文件夹用 来存放编译后的文件。 4、打开Eclipse,将工作区指定为RED5安装目录下webapps,然后新建一个项目,项目名 为myChat.这个时候你应该发现刚才myChat中的文件都被加载进来了,我们首先把src 目录指定为源代码目录,右键选择src,在弹出的菜单中选择Build Path->Use as Source Folder,即将其指定为代码文件夹。接下来要指定项目的目标目录,在项目名上右键选择Properties,选择Java Bulid Path,在选择Source标签,在下面的Browse中选择Classes 目录,将其指定为目标目录。然后选择Libraries,点击Add External JARs,将RED5安装目录下的red5.jar包含进来。 5、这个时候,在Eclipse的左边应该多了WEB-INF/src这样一个东东,我们将要在这里开 始写入我们的第一个项目代码。右键选择它,在弹出的菜单中选择New->Package,新建一个包,举例,包名可以为org.d5.first,然后再在生成的org.d5.first这个包上继续右键选择New->File,输入文件名Application.java。并在建好的文件中输入以下代码: package org.d5.first; import org.red5.server.adapter.ApplicationAdapter; public class Application extends ApplicationAdapter { public String login() { return"Welcome to Chat Servers"; } } 6、进行配置。编辑WEB-INF下的red5-web.xml,找到bean id=”web.handler”一句,将 class=”XXX”中的XXX位置修改为org.d5.first.Application,这样本程序将以刚才写的Application来运行。编辑web.xml,找到webAppRootKey,将其下面的param-value标签中的值修改为/myChat。编辑red5-web.properties,将第一句修改为webapp.contextPath=/myChat 7、删除目录webapps\myChat\WEB-INF下的log4j.properties的配置文件或者将其改名为其 它,修改相同目录下的文件web.xml,一定要删除掉下面的代码,而不能仅仅注释掉: log4jConfigLocation /WEB-INF/log4j.properties 8、编译项目 9、重新启动RED5服务器

ArchiCAD入门中文教程

ArchiCAD中文教程 带领您进入ArchiCAD的世界,一步一步地创建一个虚拟建筑。 步骤 00 –介绍 (1) 步骤 01 –建立布局 (4) 步骤 02 –利用楼层 (18) 步骤 03 –完成建筑封顶 (23) 步骤 04 –发展设计 (28) 步骤 05 –添加门窗 (38) 步骤 06 –增加楼梯 (52) 步骤 07 –定义房间用途和空间 (57) 步骤 08 –增加最终细节 (61) 步骤 09 –测量和估算建筑成本 (65) 步骤 10 –向客户演示 (69) 步骤 00 –介绍 我们将向您展示使用一个物体模型是多么容易的一件事,30分钟内您将完成所有的建筑系统,为您的客户和项目合作伙伴递送高质量的设计和图纸,ArchiCAD 虚拟建筑使用的概念都是您司空见惯的,如如墙、门、楼板和屋顶等,我们的演示过程是符合您传统的设计方式的,不过不是二维中的绘图,而是使用了三维几何和其他属性的智能物体。 “The ArchiCAD in 30 minutes”光盘包含的是一个提供仅限制了保存和打印功能的该软件的演示版。安装好后,我们将带来您完成10个步骤,每个步骤的ArchiCAD 项目文件都可以在ArchiCAD 8.0 Demo/ArchiCAD in 30 minutes目录下找到,您

必须在一次完成一个步骤,因为您不能保存,您只需要打开对应步骤的文件,该步骤之前的所有步骤完成的内容都有。 您将学习创建一个小展览室,底楼是展览空间,二楼为画廊,以及其他一些员工和参观者所需要的日常设施。 建筑平面图如下,不同的用户界面元素将帮您完成建筑该项目。

AVL_FIRE中文入门教程

流场分析的基本流程(FIRE软件) ID:qxlqixinliang 一、网格自动生成 (2) 二、网格划分工具的使用 (5) 1、Mesh tools (5) 2、surface tools (7) 3、edge tools (7) 三、网格和几何信息工具 (8) 1、网格check (8) 2、Geo info (9) 四、流场求解求解器的设置 (9)

一、网格自动生成 根据电池包内部流场的特点,我们一般使用fame的网格自动生成和手动划分网格,两者相结合基本上能完成网格划分。对于电池数量较少的模型(如下图)完全可以用网格自动生成功能来实现网格划分。 下面介绍网格自动生成的流程: 1)准备面surface mesh和线edge mesh:要求:面必须是封闭曲面,一般FIRE中可以应用的是.stl的文件,在PRO/E,CATIA 等三维的造型软件中都可以生成;与面的处理相似的还要准备边界的线数据 2)Hybrid assistant,选择start new meshing,分别定义表面网格define surface mesh和线网格define edge mesh 3)然后进入高级选项fame advanced hybrid,在这里定义最大网格尺寸和最小网格尺寸,最大网格尺寸是最小网格尺寸的2^n倍 4)选择connecting edge,一般在计算域的进出口表面建立face selection,这样可保证edge 处的网格贴体,否则网格在几何的边角会被圆滑掉,另外还可以保证进出口面的网格方向与气流方向正交,有利于计算的精确性和收敛性。通过add添加上进出口的selection 即可。

图书管理系统的C#代码(完整版)

. C#代码清单 共1个项目,包含5个类。 项目:librarysystem 类: Program.cs Readers.cs Manage.cs Menu.cs Publications.cs 主类代码: namespace librarysystem { ///

///类名:Program ///功能:项目主类 ///时间:2015-11-19 /// class Program { static void Main(string[] args) { Menu meu = new Menu(); meu.ShowMainMenu(); Console.ReadLine(); } }

. } 出版物类代码: namespace librarysystem { ///

///类名:Publications ///功能:馆藏出版物信息 ///时间:2015-11-19 /// class Publications { /*出版物编号*/ private string PublicationISBN; public string PublicationIsbn { get { return PublicationISBN; } set { PublicationISBN = value; }

. } /*出版物名称*/ public string PublicationName; /*出版物作者或出版机构*/ public string PublicationAuthor; /*出版物在架状态*/ public bool PublicationStatus; /*出版物类型*/ public string PublicationType; public Publications() { } public Publications(string PublicationISBN,string PublicationName,string PublicationAuthor,string PublicationType,bool PublicationStatus) { this. PublicationISBN = PublicationISBN; this.PublicationName = PublicationName; this.PublicationAuthor = PublicationAuthor; this.PublicationType = PublicationType; this.PublicationStatus = PublicationStatus; } }

相关主题
文本预览
相关文档 最新文档