61阅读

路由器的安装和使用-二选一:哪个路由器安装使用方法更好

发布时间:2018-02-20 所属栏目:使用方法

一 : 二选一:哪个路由器安装使用方法更好

插上电话线,然后连接上路由器,仿佛路由器安装使用就是这么简单,但大家有没有去实际操作一下呢。对比一下,下面哪一个方法更简单更易懂。真实地去体验一下路由器安装使用的整个过程吧。

关于路由器安装使用问题,怎么解决?
◆我把电话线--连接猫--路由器连接上之后无法连接宽带,如何进入路由器IP地址?请详细说明一下连接过程.越详细越好.
◆打开那个路由器IP地址登录下看下
◆你的路由器没有说明书吗?

网友给出的答案一:
◆路由器安装使用之前,得知道你的路由器IP是多少,然后在浏览器地址栏上输入那个ip,然后输入用户名密码,
◆进去后有很多功能,可以输入网络用户名,密码共享你的网络也可以建立局域网,路由器还具有网络防火墙的作用,
◆两台电脑的网线接路由器LAN口,再用一条网线将MODEM的WAN口与路由的LAN口连接,MODEM一定要链接啊
◆使用宽带路由器可自动获取IP地址和DNS,但是建议你手动指定电脑的IP地址和DNS等参数。
◆点击“网上邻居”――>“本地连接”――>“属性”――>“Internet协议(TCP/IP)属性”,
◆IP地址:192.168.1.X(1--255之间,注意最后的数字每台电脑不能相同)
◆子网掩码:默认,255.255.255.0;
◆网关:192.168.1.1(路由器LAN口默认地址);
◆首选DNS服务器:咨询你当地服务商的DNS
◆备用DNS服务器:咨询你当地服务商的DNS
◆别的电脑同样设置就行了。
◆如果你更改了路由器的LAN口IP地址,电脑的IP和网关也需要做相应的更改。

网友给出的答案二:

一、硬件路由器安装使用,先安装宽带路由器,用一条网线从宽带路由器的WAN口连接至ADSL的ADSL/CableModem口,另一条网线从宽带路由器的LAN口连接至PC机的RJ45口,电话外线连接至ADSL的Line口,连接完成后打开电脑电源启动电脑,接着打开ADSL、宽带路由器的电源,先检查ADSL的状态是否正常,然后检查宽带路由器的工作状态,若宽带路由器指示灯M2常亮,,M1熄灭表示工作正常;反之工作不正常。

二、宽带路由器的设置在路由器安装使用完成后,启动电脑,打开IE网络游览器窗口,接着在IE网络游览器地址栏中输入宽带路由器的IP地址:192.168.1.1[回车],当电脑与宽带路由器的连接建立起来后,屏幕上接着出现登录宽带路由器的界面,输入用户名:admin密码:admin;按[确定]按钮进入宽带路由器的设置。然后启用[路由器安装使用向导]对宽带路由器进行设置:

◆选择上网方式:ADSL虚拟拨号(PPPoE)
◆输入ADSL虚拟拨号(PPPoE)的上网帐号,上网口令
◆输入IP地址、子网掩码、网关、DNS服务器、备用的DNS服务器
◆宽带路由器LAN口的设置
◆宽带路由器WAN口的设置
◆MAC地址克隆[只有局域网中才能使用MAC地址克隆
◆退出宽带路由器,关电源重启宽带路由器

三、电脑网卡、网络的设置

◆在IE网络游览器中,进入[工具]->[INTERNET选项]->[连接]删除原有的ADSL虚拟拨号帐号,选择[局域网设置]中选择[自动检测设置],其它选项不打勾;

◆双击打开[网上邻居]-》选择[查看网络连接]-》在[本地连接]点右键设置网卡的属性:输入IP地址:192.168.1.x[x=2->255]子网掩码:255.255.255.0网关:192.168.1.1DNS服务器:202.100.64.68备用的DNS服务器:202.100.64.66重启电脑完成路由器安装使用。

四、将局域网中所有电脑设置在同一个网段,同一个组就可以了。

二 : NeatUpload的安装使用

版本:NeatUpload-1.2.32,用于文件上传。(www.61k.com)可传大文件。

1.在VS工具箱中点右键选“选择项”…… 将Brettle.Web.NeatUpload.dll添加到工具箱。

neatupload NeatUpload的安装使用

可以在添加后的工具箱看到相应控件。

neatupload NeatUpload的安装使用

2.新建web项目。将NeatUpload复制到项目根目录。

neatupload NeatUpload的安装使用

3.修改Web.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>

   <configSections>

       <sectionGroup name="system.web">

           <sectionname="neatUpload" type="Brettle.Web.NeatUpload.ConfigSectionHandler, Brettle.Web.NeatUpload" allowLocation="true" />

       </sectionGroup>

   </configSections>

   <appSettings/>

   <connectionStrings/>

   <system.web>

       <neatUploaduseHttpModule="false" maxNormalRequestLength="4096" maxRequestLength="2097151" defaultProvider="FilesystemUploadStorageProvider">

           <providers>

               <addname="FilesystemUploadStorageProvider"

type="Brettle.Web.NeatUpload.FilesystemUploadStorageProvider, Brettle.Web.NeatUpload" />

           </providers>

       </neatUpload>

       <compilation debug="false">

       </compilation>

       <authentication mode="Windows" />

       <httpModules>

           <!--如果不加这httpmodules,进度条不显示-->

           <addname="UploadHttpModule" type="Brettle.Web.NeatUpload.UploadHttpModule, Brettle.Web.NeatUpload"/>

       </httpModules>

   </system.web>

   <location path="Default.aspx" >

       <system.web>

           <neatUploaduseHttpModule="true" />

           <httpRuntime maxRequestLength="2097151" executionTimeout="3600" useFullyQualifiedRedirectUrl="true" />

       </system.web>

   </location>

</configuration>

现在可以拖拽控件开始编程了。

4.aspx页面代码如下:

<head runat="server">

   <title> NeatUpload </title>

   <script type="text/javascript" language="javascript">

      function ToggleVisibility(id, type)

      {

          el = document.getElementById(id);

          if(el.style)

          {

              if(type == 'on')

              { 

                 el.style.display = 'block';

              }

              else

              { 

                 el.style.display = 'none';

扩展:neatupload 使用 / neatupload 源码使用 / neatupload

              }

          }

          else

          {

              if(type == 'on')

              { 

                  el.display = 'block';

              }

              else

              {      

                 el.display = 'none';

              }

          }

      }

  </script>

</head>

<body>

   <form id="form1" runat="server">

   <div>

       <Upload:InputFile ID="AttachFile" runat="server" />

  <asp:Button ID="Upload" runat="server" Text="Upload"

           OnClientClick="ToggleVisibility('ProgressBar','on')" onclick="Upload_Click" />

      <div id="ProgressBar" >

      <Upload:ProgressBar ID="pbProgressBar" runat='server' Inline="true" Width="280px"

              Height="50px">

      </Upload:ProgressBar>

  </div>

  </div>

   </form>

</body>

</html>

设计页面如下:

neatupload NeatUpload的安装使用

5.按钮事件处理函数:

protected void Upload_Click(object sender, EventArgs e)

       {

           string FileName = this.AttachFile.FileName;//获取上传文件的全路径

           string ExtenName = System.IO.Path.GetExtension(FileName);//获取扩展名

           string SaveFileName = System.IO.Path.Combine(Request.PhysicalApplicationPath, DateTime.Now.ToString("yyyyMMddhhmm") + ExtenName);//合并两个路径为上传到服务器上的全路径

           if (this.AttachFile.ContentLength > 0)

           {

               try

               {

                   this.AttachFile.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);

               }

               catch (Exception ex)

               {

                   throw ex;

               }

           }

       }

做到这里程序就可以运行的了。

默认的进度条的样式是可以修改的。

主要修改default.css、Progress.aspx及ProgressBar控件的属性。

neatupload NeatUpload的安装使用

default.css修改部分:

.ProgressDisplay .ProgressBar {

     background-color: #D7E5F7;

扩展:neatupload 使用 / neatupload 源码使用 / neatupload

     background-image: url("/11.gif"); /*进度条背景图片*/

     height:20px;

}

#normalInProgress{

    color: Red;     /*进度条字体颜色*/

}

#completed{

    color:Blue;  /*上传完成的字体颜色*/

}

Progress.aspx是显示进度条的核心文件,相关数据的显示都在里面。

<td id="barTd" >

             <div id="statusDiv" runat="server" class="StatusMessage">

                  <Upload:DetailsSpan id="normalInProgress" runat="server" WhenStatus="NormalInProgress" style="font-weight: normal; white-space: nowrap;">                             <%-- 正在上传时显示的  --%>

                  <%-- <%# FormatCount(BytesRead) %>/<%# FormatCount(BytesTotal) %> <%# CountUnits %> --%>

                (<%# String.Format("{0:0%}", FractionComplete) %>) at <%# FormatRate(BytesPerSec) %>

                  <%-- - <%# FormatTimeSpan(TimeRemaining) %> left       --%>

                  </Upload:DetailsSpan>

                  <Upload:DetailsSpan id="chunkedInProgress" runat="server" WhenStatus="ChunkedInProgress" style="font-weight: normal; white-space: nowrap;">       

                   <%# FormatCount(BytesRead) %> <%# CountUnits %>

                      at <%# FormatRate(BytesPerSec) %>

                      - <%# FormatTimeSpan(TimeElapsed) %> elapsed

                  </Upload:DetailsSpan>

                  <Upload:DetailsSpan id="completed" runat="server" WhenStatus="Completed">

                      <%-- 上传完成时显示的  --%>

完成了: <%# FormatCount(BytesRead) %> <%# CountUnits %>

                      at <%# FormatRate(BytesPerSec) %>

                      took <%# FormatTimeSpan(TimeElapsed) %>

                  </Upload:DetailsSpan>

                  <Upload:DetailsSpan id="cancelled" runat="server" WhenStatus="Cancelled">

                      Cancelled!

                  </Upload:DetailsSpan>

                  <Upload:DetailsSpan id="rejected" runat="server" WhenStatus="Rejected">

                      Rejected: <%# Rejection != null ? Rejection.Message : "" %>

                  </Upload:DetailsSpan>

扩展:neatupload 使用 / neatupload 源码使用 / neatupload

                  <Upload:DetailsSpan id="error" runat="server" WhenStatus="Failed">

                      Error: <%# Failure != null ? Failure.Message : "" %>

                  </Upload:DetailsSpan>

                  <Upload:DetailsDiv id="barDetailsDiv" runat="server" UseHtml4="true"

                       Width='<%# Unit.Percentage(Math.Floor(100*FractionComplete)) %>' class="ProgressBar"></Upload:DetailsDiv> 

             </div>

        </td>

程序的效果图如下:

上传前:

neatupload NeatUpload的安装使用

上传中:

neatupload NeatUpload的安装使用

上传结束:

neatupload NeatUpload的安装使用

扩展:neatupload 使用 / neatupload 源码使用 / neatupload

三 : protobuf的安装和使用

最近领导分配了一个任务,这个工程挺高端的,主要以前从没有搞过,其中里面有protobuf,以前从来没有听说过这个东西,最近在网上看了一些高人的帖子,才知道protobuf是什么云云了,我的理解是,例如我们要用C++写个什么工程,C++是面向对象的,我们要写很多类,估计都得写上上百行,上千行的代码,但是现在用这个protobuf,就可以省很多是,我们只需要写消息包,然后编译,protobuf就会根据这个消息包自动生成两个文件.cc和.h,.h这两个文件中就有很多类,供我们调用。

现在说明怎样在Ubuntu下安装protobuf。网上有人说,他用了很多版本的protobuf都没有成功,最终用的2.5.0版本才成功,于是我就直接安装了这个版本,至于其他版本成不成功,我就不知道了。首先下载protobuf源码包

在Ubuntu的终端里输入:$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 这是在官网下载,但是我等了很长时间都没有下载下来,最后我在CSDN上下载下来了 下载之后解压: $ tar xvzf protobuf-2.5.0.tar.gz

进入到解压后的目录: $ cd protobuf-2.5.0

进行执行 : $ ./configure

在执行./configure这个命令之前最好把vim ,g++,make安装好,不然在执行./configure的时候可能会出现错误,上面三个安装的命令:$sudo apt-get install vim $sudo apt-get install g++ $sudo apt-get install make

./configure成功之后,接下来是如下几步:

$make

$make check

$make install //在执行这一步的时候,我出现了错误,错误的意思是执行的权限不够,如果是这样的话,$make install 这条命名就换成$sudo make install

下面我们要修改一下配置文件:$ vim ~/.profile

在打开的文件中,在文件末尾添加如下代码:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然后保存退出,接下来执行: $ source ~/.profile

使刚才修改的配置文件生效,接下来执行: $protoc --version

如果上面的步骤一切顺利的话,那么就会在终端显示protobuf的版本号,如下

下面我们来测试一下,在测试之前我们最好先建立一个文件夹,例如上面的proto,接下的操作都在这个文件夹下进行。

我们先用vim创建并编辑.proto文件,例如: $ vim msg.proto

内容如下:

然后执行下面的命令: $ protoc -I=. --cpp_out=. msg.proto

执行这条命名之后,在当前目录下就会生成如下的两个文件:

这两个文件就是根据上面的那个msg.proto文件生成了,里面有类的声明和类的实现,我们可以进入这两个文件。研究一下,这里就不在说明了。然后我们就可以调用类和里面的函数实现自己的功能了,下面是两个简单的测试文件: 我们先创建: $ vim write.cc

内容如下:

然后编译write.cc,命名如下:

$ g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread

执行生成的write文件,命令为:

$ ./write

可看到生成的msg.pb文件,这个文件是由output(“./msg.pb”,ios::out|ios::trunc|ios::binary)函数生成的

下面在创建一个文件:$ vim reader.cc

内容如下:

fstream

编译reader.cc文件:命令为:

$ g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` -lpthread 然后执行生成的reader文件。命令如下:

./reader

在终端就会打印出:

101

Hello

上面在生成可执行文件的过程,都是我们一条一条命令的输入,我们可以写Makefile,然后执行一条make命令,就可以自动生成可执行文件,

编写Makefile文件: $ vim Makefile

内容如下:

编写完之后,执行:$make

就会自动生成可执行文件write和

reader

Protobuffer语言详解:

Defined A Message Type

message SearchRequest

{

required string query = 1;

oprional int32 page_number = 2;

optional int32 result_per_page = 3;

}

上面 SearchRequest消息定义了三个fileds,每一个fileds都包含着该filed的name和type。 Message里面的每一个field都有一个unique numbered tag(也就是那些1 2 3 4)。这些tags用来在message binary format用来标识filed序号,如果这个message一旦被使用,建议必要轻易更改。需要注意的是,如果标记是1-15,那么当标记编码成二进制流的时候他们仅占一个字节,如果标记处于16-2047,标记将会占据两个字节,所以这里建议,对于那些需要频繁传输的数据尽量把他们放在前15位,这时编码key的时候就会尽量减少key的数据的大小,那么我们也应该留一些15因内的标记,以便将来可能会添加更频繁使用的filed。

最小的标记是1,最大的是2^29-1,但是从19000到19999这些被protobuf 实现保留。

Specifying Field Rules

你必须声明你所声明的filed是如下一种:

required:在你使用该消息时必须存在这种类型的filed

optional:在你使用该消息时该中filed可以不存在,但如果存在的只能存在一种 repeated:该中类型的filed可以被重复使用任意从(包括0次),而且protobuf会保存设置的次序。

Adding more message types

在一个.proto文件中可以定义多个message。例如你想定义多个相关联的message,如下例在一个proto文件中有一个reques message和一个reponse message message SearchRequest

{

required string query = 1;

optional int32 page_number = 2;

optional int32 result_per_page = 3;

}

message SearchResponse

{

……

}

我们可以直接使用//在.proto文件中添加注释

message SearchRequest

{

required string query = 1;

optional int32 page_number = 2; //which page number do we want?

optional int32 result_per_page = 3;

}

What's Generated From Your .proto?

当我们使用protocol buffer compiler编译一个.proto文件,编译器会生成与你所选语言(由编译选项决定--Java_Out 或者--Cpp_Out)相对应的代码。例如会生成所有字段的getter/setter,向输出流序列化你的messages以及从一个输入流中解析messages

For C++,,编译器会生成一个 .h 和.cc文件, proto文件里每一个message都会对应生成一个class.

For Java,编译器会生成一个java文件.在该java文件中会有N个由messages对应生成的内部类,以及一个Builder内部类.Builder用来创建其他messages生成的类的实例

Optional Fields And Default Values

如果一个optional field已经被手动地设置过默认值,那么在解析该messages时,发现该field没有被使用,那么该field会被设置成默认值.如下例

optional int32 result_per_page = 3 [default = 10];

那么如果没有手动地被设置过默认值那么就会采用系统默认值:string->"", bool->false, numeric->0 ,enums ->enums第一个value的默认值

Enumerations

在message中,可以使用枚举。Protobuf中的枚举以name/value形式出现。例如下例:VNIVERSAL = 0可以看出其value不是field_number

你可以对一个枚举类型的filed指定默认值,但是如果你指定的的值不在枚举列表中,那么解析器会认为这个字段为不可识别的字段。

message SearchRequest {

required string query = 1;

optional int32 page_number = 2;

optional int32 result_per_page = 3 [default = 10];

enum Corpus {

UNIVERSAL = 0;

WEB = 1;

IMAGES = 2;

LOCAL = 3;

NEWS = 4;

PRODUCTS = 5;

VIDEO = 6;

}

optional Corpus corpus = 4 [default = UNIVERSAL];

}

Using Other Message Types

我们可以采用其他的message作为我们的field类型.例如在下例中我们在同一.proto文件中定义了俩个messages,然后SearchResponse中使用Result作为field的类型.

message SearchResponse {

repeated Result result = 1;

}

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

Importing Definitions

在上例中Result 和SearchResponse 都定义在同一个.proto 文件,那么如果俩个messages不在同一个.proto 文件中怎么办呢?

我们采用在文件顶部import其他.proto文件来访问其他proto文件中的messages. import "myproject/other_protos.proto";

你可以在messageA里定义一个新的messageB,然后在messageA里使用messageB.例如下例: message SearchResponse {

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

repeated Result result = 1;

}

当message不再满足你的需求,例如你想要添加一个字段,但是你仍想使用原来生成的代码,不想破坏现存的代码,只要记住如下规则,你就可以实现这个需求了

不要改变原有fields的标记(序号).

新添加的fields要设置成optional or repeated. 这意味着你的新代码可以解析由原有的message序列化而成的messages,而且不会丢失那些required 元素.你应该对新的fields设置上明显的default values 以便新的代码可以和由旧代码生成的message交互.

标准方法:

解析和序列化:

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列在恢复为对象。

把对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为对象的过程称为对象的反序列化。

Message PhoneNumber

{

required string number = 1;

optional PhoneTyep type = 2 [default HOME]; //是默认值

}

Repeated PhoneNumber phone = 4; //repeated是重复的意思

Protobuf消息的定义:

消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式。 字段格式: 限定修饰符1 数据类型2 字段名称3 = 字段编码值4 [字段默认值5]

1限定修饰符包括required\optional\repeated

Required:表示一个必须的字段,必须相当于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前的没有设置required字段或者无法识别required字段都会引起编码异常,导致消息被丢弃。 就好比你(发送方)去面试的时候,填

写个人信息表,一个人必须要有身份证号,那么在表中身份证号这一栏必须的填。如果你不填那么HR(接收方)就会说,不行,你这张表无效,因为你的身份证号没有填写。

Optional: 表示一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或不设置该字段的值。对于接收方,如果能够识别可选字段则进行相应的处理,如果无法识别,则忽略该字段,消息中的其他字段正常处理。--因为optional字段的特征,很多接口在升级版本中都把后来添加的字段够统一的设置为optional,这样老的版本无需升级程序也可以正常的域新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 就好比个人信息表中家庭成员一栏,你(发送方)可以填,也可以不填,如果你填的话,HR(接收方)就把栏信息登记一下,你不填的话,HR就不登记了,不影响HR登记其他的信息。

Repeated: 表示该字段可以包含0-n个元素,其特性和optional一样,但是一次可以包含多个值,可以看做是在传递一个数组的值。就好比你的教育经历,你可以只填你的大学经历这一项,也可以填大学和高中的经历,这两项,还可以填写大学、高中和初中,这三项经历。也就是桌教育经历可以填一个经历,也可以填多个经历。

2.数据类型: protobuf定义了一套基本数据类型,几乎都可以映射到C++/Java等语言的基础数据类型:

N表示打包的字节并不是固定的。而是根据数据的大小或者长度

例如Int32 ,你在发送消息的时候,设置的值比较小,在0—127之间,那么就使用一个字节打包。

关于枚举的打包方式和uint32相同。

关于message,类似于C语言中结构体包含另一个结构体作为数据成员一样。

关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32

3.字段名称: 字段名称的命名和C。C++灯语言的变量命名方式几乎是相同的。

4.字段编码值

有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。

编码值的取值范围为 1~2^32(4294967296)。

其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16.

1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。 protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值。

消息中的字段的编码值无需连续,只要是合法的,并且不能在同一个消息中有字段包含相同的编码值。

建议:项目投入运营以后涉及到版本升级时的新增消息字段全部使用optional或者repeated,尽量不实用required。如果使用了required,需要全网统一升级,如果使用optional或者repeated可以平滑升级。就好比在编码信息的时候,年龄是30 ,大学里开了30门课,然后就将将这个两个30编码了,发送给接收方了,但是当接受方收到之后,不知道这两个30是什么意思。然后你就必须给这两个30编一下序,2号表示年龄,为30, 15,课程数,30。其实这个编码值可以表示发送一帧数据,第一字节,第二字节,第三字节……

ID age classes

⑤.默认值。当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端。当接受数据时,对于optional字段,如果没有接收到optional字段,则设置为默认值。

关于import

Protobuf接口文件可以像C语言的.h文件一样,在需要的时候通过import导入需要的文件,和include的行为大致想相同。

关于package

避免名称冲突,可以给每个文件指定一个package名称,对于C++则解析为命名空间。

四 : protobuf的安装和使用

最近领导分配了一个任务,这个工程挺高端的,主要以前从没有搞过,其中里面有protobuf,以前从来没有听说过这个东西,最近在网上看了一些高人的帖子,才知道protobuf是什么云云了,我的理解是,例如我们要用C++写个什么工程,C++是面向对象的,我们要写很多类,估计都得写上上百行,上千行的代码,但是现在用这个protobuf,就可以省很多是,我们只需要写消息包,然后编译,protobuf就会根据这个消息包自动生成两个文件.cc和.h,.h这两个文件中就有很多类,供我们调用。(www.61k.com]

现在说明怎样在Ubuntu下安装protobuf。网上有人说,他用了很多版本的protobuf都没有成功,最终用的2.5.0版本才成功,于是我就直接安装了这个版本,至于其他版本成不成功,我就不知道了。首先下载protobuf源码包

在Ubuntu的终端里输入:$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz 这是在官网下载,但是我等了很长时间都没有下载下来,最后我在CSDN上下载下来了 下载之后解压: $ tar xvzf protobuf-2.5.0.tar.gz

进入到解压后的目录: $ cd protobuf-2.5.0

进行执行 : $ ./configure

在执行./configure这个命令之前最好把vim ,g++,make安装好,不然在执行./configure的时候可能会出现错误,上面三个安装的命令:$sudo apt-get install vim $sudo apt-get install g++ $sudo apt-get install make

./configure成功之后,接下来是如下几步:

$make

$make check

$make install //在执行这一步的时候,我出现了错误,错误的意思是执行的权限不够,如果是这样的话,$make install 这条命名就换成$sudo make install

下面我们要修改一下配置文件:$ vim ~/.profile

在打开的文件中,在文件末尾添加如下代码:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然后保存退出,接下来执行: $ source ~/.profile

使刚才修改的配置文件生效,接下来执行: $protoc --version

如果上面的步骤一切顺利的话,那么就会在终端显示protobuf的版本号,如下

proto protobuf的安装和使用

下面我们来测试一下,在测试之前我们最好先建立一个文件夹,例如上面的proto,接下的操作都在这个文件夹下进行。

我们先用vim创建并编辑.proto文件,例如: $ vim msg.proto

内容如下:

proto protobuf的安装和使用

proto protobuf的安装和使用

然后执行下面的命令: $ protoc -I=. --cpp_out=. msg.proto

执行这条命名之后,在当前目录下就会生成如下的两个文件:

这两个文件就是根据上面的那个msg.proto文件生成了,里面有类的声明和类的实现,我们可以进入这两个文件。[www.61k.com)研究一下,这里就不在说明了。然后我们就可以调用类和里面的函数实现自己的功能了,下面是两个简单的测试文件: 我们先创建: $ vim write.cc

内容如下:

然后编译write.cc,命名如下:

$ g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread

执行生成的write文件,命令为:

$ ./write

可看到生成的msg.pb文件,这个文件是由output(“./msg.pb”,ios::out|ios::trunc|ios::binary)函数生成的

下面在创建一个文件:$ vim reader.cc

内容如下:

proto protobuf的安装和使用

proto protobuf的安装和使用

fstream

proto protobuf的安装和使用

编译reader.cc文件:命令为:

$ g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` -lpthread 然后执行生成的reader文件。(www.61k.com)命令如下:

./reader

在终端就会打印出:

101

Hello

上面在生成可执行文件的过程,都是我们一条一条命令的输入,我们可以写Makefile,然后执行一条make命令,就可以自动生成可执行文件,

编写Makefile文件: $ vim Makefile

内容如下:

编写完之后,执行:$make

就会自动生成可执行文件write和

proto protobuf的安装和使用

proto protobuf的安装和使用

reader

proto protobuf的安装和使用

Protobuffer语言详解:

Defined A Message Type

message SearchRequest

{

required string query = 1;

oprional int32 page_number = 2;

optional int32 result_per_page = 3;

}

上面 SearchRequest消息定义了三个fileds,每一个fileds都包含着该filed的name和type。[www.61k.com) Message里面的每一个field都有一个unique numbered tag(也就是那些1 2 3 4)。这些tags用来在message binary format用来标识filed序号,如果这个message一旦被使用,建议必要轻易更改。需要注意的是,如果标记是1-15,那么当标记编码成二进制流的时候他们仅占一个字节,如果标记处于16-2047,标记将会占据两个字节,所以这里建议,对于那些需要频繁传输的数据尽量把他们放在前15位,这时编码key的时候就会尽量减少key的数据的大小,那么我们也应该留一些15因内的标记,以便将来可能会添加更频繁使用的filed。

最小的标记是1,最大的是2^29-1,但是从19000到19999这些被protobuf 实现保留。

Specifying Field Rules

你必须声明你所声明的filed是如下一种:

required:在你使用该消息时必须存在这种类型的filed

optional:在你使用该消息时该中filed可以不存在,但如果存在的只能存在一种 repeated:该中类型的filed可以被重复使用任意从(包括0次),而且protobuf会保存设置的次序。

Adding more message types

在一个.proto文件中可以定义多个message。例如你想定义多个相关联的message,如下例在一个proto文件中有一个reques message和一个reponse message message SearchRequest

{

required string query = 1;

optional int32 page_number = 2;

optional int32 result_per_page = 3;

}

message SearchResponse

{

……

}

我们可以直接使用//在.proto文件中添加注释

message SearchRequest

{

required string query = 1;

optional int32 page_number = 2; //which page number do we want?

proto protobuf的安装和使用

optional int32 result_per_page = 3;

}

What's Generated From Your .proto?

当我们使用protocol buffer compiler编译一个.proto文件,编译器会生成与你所选语言(由编译选项决定--Java_Out 或者--Cpp_Out)相对应的代码。[www.61k.com)例如会生成所有字段的getter/setter,向输出流序列化你的messages以及从一个输入流中解析messages

For C++,,编译器会生成一个 .h 和.cc文件, proto文件里每一个message都会对应生成一个class.

For Java,编译器会生成一个java文件.在该java文件中会有N个由messages对应生成的内部类,以及一个Builder内部类.Builder用来创建其他messages生成的类的实例

Optional Fields And Default Values

如果一个optional field已经被手动地设置过默认值,那么在解析该messages时,发现该field没有被使用,那么该field会被设置成默认值.如下例

optional int32 result_per_page = 3 [default = 10];

那么如果没有手动地被设置过默认值那么就会采用系统默认值:string->"", bool->false, numeric->0 ,enums ->enums第一个value的默认值

Enumerations

在message中,可以使用枚举。Protobuf中的枚举以name/value形式出现。例如下例:VNIVERSAL = 0可以看出其value不是field_number

你可以对一个枚举类型的filed指定默认值,但是如果你指定的的值不在枚举列表中,那么解析器会认为这个字段为不可识别的字段。

message SearchRequest {

required string query = 1;

optional int32 page_number = 2;

optional int32 result_per_page = 3 [default = 10];

enum Corpus {

UNIVERSAL = 0;

WEB = 1;

IMAGES = 2;

LOCAL = 3;

NEWS = 4;

PRODUCTS = 5;

VIDEO = 6;

}

optional Corpus corpus = 4 [default = UNIVERSAL];

}

Using Other Message Types

我们可以采用其他的message作为我们的field类型.例如在下例中我们在同一.proto文件中定义了俩个messages,然后SearchResponse中使用Result作为field的类型.

message SearchResponse {

proto protobuf的安装和使用

repeated Result result = 1;

}

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

Importing Definitions

在上例中Result 和SearchResponse 都定义在同一个.proto 文件,那么如果俩个messages不在同一个.proto 文件中怎么办呢?

我们采用在文件顶部import其他.proto文件来访问其他proto文件中的messages. import "myproject/other_protos.proto";

你可以在messageA里定义一个新的messageB,然后在messageA里使用messageB.例如下例: message SearchResponse {

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

repeated Result result = 1;

}

当message不再满足你的需求,例如你想要添加一个字段,但是你仍想使用原来生成的代码,不想破坏现存的代码,只要记住如下规则,你就可以实现这个需求了

不要改变原有fields的标记(序号).

新添加的fields要设置成optional or repeated. 这意味着你的新代码可以解析由原有的message序列化而成的messages,而且不会丢失那些required 元素.你应该对新的fields设置上明显的default values 以便新的代码可以和由旧代码生成的message交互.

标准方法:

proto protobuf的安装和使用

proto protobuf的安装和使用

解析和序列化:

proto protobuf的安装和使用

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。[www.61k.com]无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列在恢复为对象。

把对象转换为字节序列的过程称为对象的序列化。

把字节序列恢复为对象的过程称为对象的反序列化。

Message PhoneNumber

{

required string number = 1;

optional PhoneTyep type = 2 [default HOME]; //是默认值

}

Repeated PhoneNumber phone = 4; //repeated是重复的意思

Protobuf消息的定义:

消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式。 字段格式: 限定修饰符1 数据类型2 字段名称3 = 字段编码值4 [字段默认值5]

1限定修饰符包括required\optional\repeated

Required:表示一个必须的字段,必须相当于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前的没有设置required字段或者无法识别required字段都会引起编码异常,导致消息被丢弃。 就好比你(发送方)去面试的时候,填

proto protobuf的安装和使用

写个人信息表,一个人必须要有身份证号,那么在表中身份证号这一栏必须的填。(www.61k.com]如果你不填那么HR(接收方)就会说,不行,你这张表无效,因为你的身份证号没有填写。

Optional: 表示一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或不设置该字段的值。对于接收方,如果能够识别可选字段则进行相应的处理,如果无法识别,则忽略该字段,消息中的其他字段正常处理。--因为optional字段的特征,很多接口在升级版本中都把后来添加的字段够统一的设置为optional,这样老的版本无需升级程序也可以正常的域新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 就好比个人信息表中家庭成员一栏,你(发送方)可以填,也可以不填,如果你填的话,HR(接收方)就把栏信息登记一下,你不填的话,HR就不登记了,不影响HR登记其他的信息。

Repeated: 表示该字段可以包含0-n个元素,其特性和optional一样,但是一次可以包含多个值,可以看做是在传递一个数组的值。就好比你的教育经历,你可以只填你的大学经历这一项,也可以填大学和高中的经历,这两项,还可以填写大学、高中和初中,这三项经历。也就是桌教育经历可以填一个经历,也可以填多个经历。

2.数据类型: protobuf定义了一套基本数据类型,几乎都可以映射到C++/Java等语言的基础数据类型:

proto protobuf的安装和使用

N表示打包的字节并不是固定的。而是根据数据的大小或者长度

例如Int32 ,你在发送消息的时候,设置的值比较小,在0—127之间,那么就使用一个字节打包。

proto protobuf的安装和使用

关于枚举的打包方式和uint32相同。[www.61k.com]

关于message,类似于C语言中结构体包含另一个结构体作为数据成员一样。

关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32

3.字段名称: 字段名称的命名和C。C++灯语言的变量命名方式几乎是相同的。

4.字段编码值

有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。

编码值的取值范围为 1~2^32(4294967296)。

其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16.

1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。 protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值。

消息中的字段的编码值无需连续,只要是合法的,并且不能在同一个消息中有字段包含相同的编码值。

建议:项目投入运营以后涉及到版本升级时的新增消息字段全部使用optional或者repeated,尽量不实用required。如果使用了required,需要全网统一升级,如果使用optional或者repeated可以平滑升级。就好比在编码信息的时候,年龄是30 ,大学里开了30门课,然后就将将这个两个30编码了,发送给接收方了,但是当接受方收到之后,不知道这两个30是什么意思。然后你就必须给这两个30编一下序,2号表示年龄,为30, 15,课程数,30。其实这个编码值可以表示发送一帧数据,第一字节,第二字节,第三字节……

ID age classes

⑤.默认值。当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端。当接受数据时,对于optional字段,如果没有接收到optional字段,则设置为默认值。

关于import

Protobuf接口文件可以像C语言的.h文件一样,在需要的时候通过import导入需要的文件,和include的行为大致想相同。

关于package

避免名称冲突,可以给每个文件指定一个package名称,对于C++则解析为命名空间。

五 : 经典_Red5+的安装和使用

使用Red5和FFMpeg搭建在线Flash流媒体分享平台

最近视频的东西比较火,前些天我也稍微了解了一下使用开源软件建在线Flash流媒体播放平台的解决方案,还是有一些收获。(www.61k.com] Red5是一款基于java的开源的Flash流媒体Server 软件,可以作为取代Macromedia提供的商业版本FMS。Red5使用RSTP作为流媒体传输协议,内置了一些示例,这些示例实现了在线录制, flash流媒体播放,在线聊天,视频会议等一些基本的功能。由于系统本身是开源的,在碰到问题的时候也比较容易解决,大不了直接改代码,在成本方面也可 以省下一笔不小的开销,为未来的功能扩展也提供了充分的空间。

如果仅仅是实现在线录制,在线播放,那么Red5也就差不多够了,但可能我们有时候还需要用户上传自己拍摄的视频文件,而要把这些视频文件转成可播放的flv文件就需要视频编码软件了。FFMpeg提供了录制,播放,视频流处理的完整解决方案。它自身也带了一个基于HTTP的流媒体广播程序以及其它几个实用的程序,但我们的重点还是它的视频转换程序,似乎Google Video也是用的它的程序作为视频转换工具。

我用FFMpeg转了几个视频,效果还可以,在声音上碰到了一些问题,在不添加参数的情况下,有一部分视频的声音会有问题,有的视频无论怎么添加参 数,都出不来声音,报错提示的是不支持所带的声音采样格式,只支持几种固定的格式,我看了一下代码,确实是这样子,但理论上应该是能够解决的。 FFMpeg自带的libavcodec是一套很牛的编码库,为了保证质量和性能,里面的很多codec都是从头开发的。

这两个加起来,实现一些简单的在线视频功能就差不多了。

red5安装 经典_Red5+的安装和使用

D5Power Studio原创,转载请注明出处~谢谢!

RED5的中文资料象牛毛一样稀少。[www.61k.com]。从下载到完全调试成功,大概花费了1天多的时间。在这个把中间出现的问题罗列出来,希望给想研究RED5的朋友一点帮助。

需要用到的软件:

RED5 0.6 RC2 : http://osflash.org/red5

Eclipse 3.2 : http://www.eclipse.org

ant: http://ant.apache.org/

JDK: http://java.sun.com/javase/downloads/index.jsp

如果想直接通过SVN获得最新的RED5,还需要安装Eclipse的SVN插件:http://subclipse.tigris.org/

呵呵,装的东西够多吧?简单说一下各个软件的用途。如果是直接从SVN下载获得RED5,那么这里是不具备WIN下运行的文件的,所以就需要ant server来编译运行。下载安装包的朋友就不需要再用ANT来编译了(不过做开发的话,建议还是拖下来比较好,又不大,10几M而已)。Eclipse 是开发RED5服务器端的必须工具,JDK是RED5运行的必要环境。

这里,我以SVN下载版为例来介绍配置。

首先在Eclipse中用SVN插件(右上角有一个小加号的图标->other->SVN xxx)从RED5官方网站获得最新的代码(我下了至少两个小时,美国到中国好远啊。。。)SVN地址在RED5的官方网站,我下载的时候为

http://svn1.cvsdude.com/osflash/red5/java/server/trunk,连接上以后,在最上面的那一级点右键,选择check out,然后选择目标路径什么的就不再多说了。。

下载完成后,需要为Eclipse指定RED5的Build文件,在左边的列表顶端文件上点右键,然后选择External tools(工具栏绿色的PLAY图标,有红色锁的那个。。),打开后选左侧择蚂蚁图标(ANT),右键->Creat,输入文件名 server_all,然后点第一行的浏览按钮,在弹出的窗口中选择build.xml,确定。然后选择target标签,在下面的选择中把all勾选, 并选中该行,然后Apply.再操作一次,新建server_server,同样选择build.xml,然后在target中把all的勾选取消,选择 server,同样选中该行,点Apply.

这个时候运行server_all,我在这里出现了错误(详细见上一篇日志),解决办法为修改build.properti中的JAVA版本号与本机实际JDK版本号一致。另外也有人说报其他错误,要修改BUILD.XML,但我没有遇到这个问题(参见

red5安装 经典_Red5+的安装和使用

)。[www.61k.com)

当你看到BUILD SUCCESS的时候,恭喜你,编译成功咯。

OK,接下来可以建立第一个应用程序了,为了省事,可以去RED5的webapps里面,把test直接复制一份,改名为demo,然后把里面除了 WEB-INF以外的其他文件删除,再进WEB-INF中,把src和class两个文件夹清空,在把除了这两个文件夹以外的其他文件夹删除(如果有的 话),现在终于清净了,在Eclipse中把工作区设置在RED5的webapps,然后新建一个项目,命名为demo,这个时候你会发现刚才弄好的文件 夹demo中的内容已经显示在左边了:)右键选择src,Build Path->Use as Source Folder,将其指定为代码文件夹,然后在项目名demo上右键选择Properties,选择Java Bulid Path,在选择Source标签,在下面的Browse中选择Class目录,将其指定为目标目录。删除左边自动生成的BIN目录,OK!

为了编译RED5程序,我们要把RED5的包导入到现在的项目中来。在项目名上点右键选择Properties,然后在Java Build Path中选择Libraries,点击Add External JERS将RED5中的red5.jar包含入项目。然后,就可以按照RED5自带的指导文件建立第一个RED5程序啦!

red5安装 经典_Red5+的安装和使用

公司今天需要装一台RED5的服务器用来开发程序。[www.61k.com)发现RED5的0.6已经正式放出,以前我写过一篇关于用SVN进行抽取,然后建立RED5项目的文章。而对于一般的开发者来说,不需要去修改RED5本身的程序,只需要建立自己的应用程序就可以了。现在把建立过程记录下来,希望对各位有所帮助。本文适合第一次接触RED5(WIN平台下),而不知道如何开始建立自己的应用程序的用户。

流程:

1.下载最新版本的RED5 http://osflash.org/red5

2.安装RED5,注意在安装RED5前要先安装好JRE,安装RED5的时候会要求指定JRE的目录的。

3.到RED5的安装目录,找到doc/templates目录,该目录中存放了一个标准的RED5应用程序模版myapp,将其复制到RED5安 装目录中的webapps目录下,并改名为你喜欢的文件夹名,比如你要开发一个聊天的程序,那么可以把myapp改为myChat,这个名字就是以后你要 连接的服务名了。

61阅读请您转载分享:

4.在WEB-INF中新建一个文件夹src用来存放程序的源代码,新建一个classes文件夹用来存放编译后的文件。

5.打开Eclipse,将工作区指定为RED5安装目录下webapps,然后新建一个项目,项目名为myChat.这个时候你应该发现刚才 myChat中的文件都被加载进来了,我们首先把src目录指定为源代码目录,右键选择src,在弹出的菜单中选择Build Path->Use as Source Folder,即将其指定为代码文件夹。接下来要指定项目的目标目录,在项目名上右键选择Properties,选择Java Bulid Path,在选择Source标签,在下面的Browse中选择Class目录,将其指定为目标目录。然后选择Libraries,点击Add External JARs,将RED5安装目录下的red5.jar包含进来。

6.这个时候,在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 {

red5安装 经典_Red5+的安装和使用

public String login(){

return "Welcome to Chat Servers";

}

}

7.进行配置。(www.61k.com]编辑WEB-INF下的red5-web.xml,找到bean id=”web.handler”一句,将class=”XXX”中的XXX位置修改为org.d5.first.Application,这样本程序将 以刚才写的Application来运行。删除后面的bean

id=”server.handler?整句,因为我们暂时用不到这个东东。编辑web.xml,找到webAppRootKey,将其下面的param -value标签中的值修改为/myChat。编辑red5-web.properties,将第一句修改为webapp.contextPath= /myChat

8.编译项目

9.重新启动RED5服务器

10.在FLASH中新建一个文件,输入以下代码:

nc = new NetConnection();

nc.connect("rtmp://localhost/myChat");

nc.onResult = function(obj){

trace(obj);

}

nc.call("login",nc);

运行程序,显示结果为Welcome to Chat Servers。第一个RED5应用程序诞生了,呵呵:)

red5安装 经典_Red5+的安装和使用

Red5 简单安装指南howto Red5是个开源的flash服务器,相对fms 4500$的一个lic的价格,能省好多钱哦,今天就测试安装一下Red5

1.配置java环境

去sun网站下载最新的jdk1.5.0_07,怎么安装不说了,直接解压安装到/usr/java/jdk1.5.0_07目录

然后在/etc/profile添加以下几句信息

export

PATH=$PATH:/usr/java/jdk1.5.0_07/bin:/usr/java/jdk1.5.0_07/jre/bin export JAVA_HOME=/usr/java/jdk1.5.0_07

export

CLASSPATH="./:/usr/java/jdk1.5.0_07/lib:/usr/java/jdk1.5.0_07/jre/lib"

export

LD_LIBRARY_PATH=/usr/java/jdk1.5.0_07/jre/lib/i386:/usr/java/jdk1.5.0_07/jre/lib/i386/server

注意,默认的as4可能自带java,把自带的先删除了!!

2.安装apche-ant

去apache网站下载最近的版本,安装方法跟jdk差不多,也是解压到

/usr/local/ant目录

然后在/etc/profile添加以下几句信息

export ANT_HOME=/usr/local/ant

export PATH=$PATH:/usr/local/ant/bin

source /etc/profile 让配置生效

3.安装Red5

可以用svn下载最新的版本

svn co http://svn1.cvsdude.com/osflash/red5/java/server/tags/0_5/ red5 cd red5

编译:输入ant命令,自动编译

运行

./red5.sh &

red5安装 经典_Red5+的安装和使用

4.简单的配置,使用demo

配置端口:conf/red5.properties 修改此文件就行

访问http://ip:5080

可以运行自带的demo,记住如果你配了ip,自带的demo里的地址localhost都要换成你的真实地址

在线录制的例子: 在线播放的例子: 分享例子,类似远程演示:

red5安装 经典_Red5+的安装和使用

开源的视频会议系统openmeetings——安装

OpenMeetings是一个开源的视频会议软件。(www.61k.com)它是基于OpenLaszlo’s的新流媒体格式和开源的Flash服务器---Red5!

本文以安装openmeetings目前的最新版本openmeetings05Beta5为例,详细说一下我的安装过程。这一版本的官方安装 说明见

http://code.google.com/p/openmeetings/wiki/InstallationOf05RC5Beta5,不 过是英文的。官方的安装给出了基于多种数据库和不同操作系统的安装方法。下面仅以基于mysql数据库和windows 2003 server的安装为例,来说明整个安装过程。

1. 到http://code.google.com/p/openmeetings/downloads/list 上下载openmeetings的最新版本(目前为止最新是openmeetings05Beta5)。

2. 安装mysql数据库,我安装的是mysql-5.0.41-win32的版本,安装后创建一个空的数据库,名为xmlcrm。

3. 安装Open-Office-Service,我安装的是openoffice.org2.2。

a. 安装完毕后,打开“开始”-〉“程序”->“OpenOffice.org 2.2”-〉OpenOffice.org Base(若是第一次运行,需要注册并配置,填写注册信息,不要进行数据库配置)

b. 软件运行后,点“开始”-〉“运行”-〉cmd,进入“命令提示符”; c. 进入openoffice的安装目录下的program目录,如:C:\Program Files\OpenOffice.org 2.2\program

d. 输入以下命令使openoffice在手动模式下运行在8100端口上:soffice.exe -headless -nologo -norestore

-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager e. 输入以下命令检查服务是否正常运行:netstat -anp tcp

61阅读请您转载分享:

f. 点“回车”后会出现一个列表,当发现列表中有如下一行,说明配置成功:TCP 127.0.0.1:8100 0.0.0.0:0 LISTENING

4. 安装“ImageMagick”,我安装的是

ImageMagick-6.3.6-1-Q16-windows-dll

5. 安装Ghostscript,我装的是Ghostscript 8.51

6. 安装SWFTools,我装的是swftools-0.8.1

7. 安装jre,我装的是jre1.5.0

red5安装 经典_Red5+的安装和使用

8. 安装Red5 Server,我装的是red5-0.6.3,下载地址

http://dl.fancycode.com/red5/0.6.3/win/setup -red5-0.6.3.exe

9. 将openmeetings的压缩包解压,得到的xmlcrm文件夹放到

$RED5-HOME/webapps/目录下。[www.61k.com]那么,现在$RED5- HOME/webapps/xmlcrm/就是视频会议系统的主目录($RED5-HOME表示red5的安装目录,接下来我们用$ OPENMEETINGS-HOME代表视频会议系统的主目录)

10. 到$OPENMEETINGS-HOME/install文件夹下,找到文件

mysql_hibernate.cfg.xml,改名为hibernate.cfg.xml,打开它,修改下列语句:

<property name="connection.username">root</property>

<property name="connection.password"></property>

<property

name="connection.url">jdbc:mysql://localhost:3306/xmlcrm </property>

11. 重新启动red5,打开浏览器,会出现图1的画面,点击“continue with STEP 1”,出现图2的画面;

12. 将图2的所有信息填写完整后,点击“senden”,等待几分钟的时间(因为此时要执行安装过程,主要是要向数据库中创建好多表,你可以到$RED5- HOME/log目录下找到red5.log文件查看安装记录,以确定安装过程是否正常),若最后出现图3的画面,则表示安装成功,点击“Enter the Application”进入系统。

red5安装 经典_Red5+的安装和使用

red5安装 经典_Red5+的安装和使用

图1

red5安装 经典_Red5+的安装和使用

red5安装 经典_Red5+的安装和使用

图2

red5安装 经典_Red5+的安装和使用

red5安装 经典_Red5+的安装和使用

图3

red5安装 经典_Red5+的安装和使用

关于red5——开源的Flash流媒体服务器red5简介

在介绍RED5之前,有必要先介绍一下Flash Media Server。(www.61k.com]

Flash Media Server,简称FMS,以前也叫Flash Communication Server(FCS),是Flash大家庭里的一员,被称为是目前开发Web音视频应用程序(比如,视频聊天室、视频会议系统、播客系统、音视频留言等 等)的最方便最快捷的解决方案。也在web应用程序开发上有着越来越广泛的应用。FMS如此的优良功能当然并不是免费提供给广大用户的,4000美金每个 点的价格让很多开发人员望而却步。于是,开源的Red5成为人们的新宠。

Red5是一个采用Java开发开源的Flash流媒体服务器,功能上与fms类似。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。

Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash流媒体播放,在线聊天,视频会议等一些基本功能。

Red5的官方网站是http://osflash.org/red5,它目前正处在研发阶段,现在发布的测试版本为0.6.3,它的最终正式版为1.0,red5研发的进程已列在了官方网站上:http://osflash.org/red5/roadmap。

下面介绍几个比较好的学习Red5的网站:

Openred5中文开源社区:

http://www.openred5.cpm/bbs/index.php

一个red5学习者的博客:

http://blog.tianya.cn/blogger/view_blog.asp?BlogName=weitiger 第五动力:

http://www.d5power.com/thread.php?fid=20

61阅读请您转载分享:

本文标题:路由器的安装和使用-二选一:哪个路由器安装使用方法更好
本文地址: http://www.61k.com/1128654.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1