一日一点RakNet(6)--帮助手册

 

帮助手册

 

工程设置

 

在教程中,所有的图片和界面参考的是VS2005,微软版权。同等参数配置你的编译器。

1. 创建Win32控制台工程,将它命名为ChatServer

 一日一点RakNet(6)--帮助手册_第1张图片

2. 选择控制台应用程序,以及空工程。选择Windows应用程序也是可以的。

 一日一点RakNet(6)--帮助手册_第2张图片

3.加入RakNet源文件到工程中。可以右键点击工程名字,选择Add,然后是Exiting标签。浏览到你下载的RakNet,转到源码目录,点击shift键,选择第一个文件,然后点击最后一个文件,点击OK。

一日一点RakNet(6)--帮助手册_第3张图片

4. 在工程中加入一个main文件。右击工程名,选择Add,然后选择New标签。在VisualC++选择C++file,命名为main.cpp。

一日一点RakNet(6)--帮助手册_第4张图片

5. 因为我们将文件放到了目录而不是工程中,需要包含目录到include路径,这样我们不需要在每次#include时输入完整的路径。右键点击“Chat Server”工程名字,选择属性,在顶端选择下拉菜单,选择“All Configurations”,选择C/C++/General/Additional Include Directory。将rakNet的路径加到Additonnal directory一项,然后点击OK。

一日一点RakNet(6)--帮助手册_第5张图片

6. 下一个 连接ws2_32.lib,从同一个对话框,选择Linker/General,加入到Additional Dependencies 中

一日一点RakNet(6)--帮助手册_第6张图片

7. 修改字符集为not set。这个是基于strings的数组使用的,与Unicode和宽字符集相对。

一日一点RakNet(6)--帮助手册_第7张图片

 

教程代码实现

1. 设计

       以聊天服务器以尽可能基础开始。他应该有两个主模式,服务器和客户端。服务器会接受一个客户端消息。客户端会在启动后发送一个消息到服务器。将所有要输入的变量硬编码到程序中,这样我们不需要将非网络的一些东西和这些代码混在一起。

 

2. 第一次编译

       创建主函数。询问用户是想要运行一个client还是Server。生成对等段实例,然后使用合适的参数为Server或Client调用Startup。在结束时要销毁对等段。

       试着在第一个程序中写下。完成后,参考如下代码。

       点击F7或Build。应该可以成功编译。如果没有,参考FAQ,它给出了为什么编译不成功,以及如何修改它。如果在里面无法找打答案,将问题发布到论坛上。

 

3. 增加功能

       现在我们有了一个客户端和服务器实例,我们需要知道它能做什么。最好的方法就是去看源码:RakPeerinterface.h。它包含了所有类得函数,加上详细的注释。看Startup和Connect函数的注释。也应该看一下SetMaximumInconmingConnections的注释。

       在代码中,服务器创建之后,增加代码启动服务器。它需要一些参数,可以根据注释中描述的,按照自己的想法设置这些参数。

       在客户端进行相同的设置。在生成代码后,增加链接到服务器的代码。它需要一个IP,加入读取IP地址的代码。服务器的端口,或者让用户输入端口,或者硬编码到代码中。客户端的端口,或者放入代码读取,或者放置为0,进行自动选取。

       这些就是要做的启动一个服务器或链接客户端到服务器。确定是否链接成功,需要能够从网络系统中读取胸袭。在RakPeerInterface.h中,可以发现Receive函数。这个函数返回“Packet”结构体,这个结构体在RakNetTypes.h中定义。它封装了一个消息,非常简单。现在就去看一下。

       可以看到参数“Char * data”,所有的包涵了一个字节数组。这些字节可以是你要发送的任何数据。数字的长度有length和bitSize域指定。RakNet使用的约定是在第一个字节定义的,可以告诉你这个数据是什么数据。这些标识符是在MessageIdentifier.h中定义。现在就去看看这些定义。

       你会看到非常少的几个预定义枚举数据。你应该快速读一读注释。现在我们仅仅关心那些连接枚举类型数据。因此你接下来的编程步骤如下:

      1.为程序主体创建一个循环。

       2. 在循环中,调用Receive,存储返回的指针。

       3. 如果包变量不是0(意味着有数据包),检测Pakcket::data的第一个字节。看一下那个连接相关的枚举值符合(可以使用switchcase来实现)

       4. 打印出与枚举类型一起的注释

       5. 正如注释中所描述,使用完了pakcet指针,要将它传递给DeallocatePakcet方法释放资源。

 

       首先试着自己写一下,写完之后,参考例子代码2

       这时,你应该能够欲行两个实例,连接它们。如果不能连接,参考FAQ或者将问题发送到论坛。如下是例子的输出内容。

       Server output

       (C)lient or (S) erver

       S

       Starting the server

       A connection is incoming.

      

       Client  Output

       (C)lient or (S) erver

       C

       Enter Server IP 或点击Enter使用默认值127.0.0.1

       127.0.0.1

       Starting the Client

       Our connection request has been accepted。

       现在准备发送输入的数据。

       下一步编程是:

       1. 增加一个用户定义的枚举类型,作为你自己的消息的第一个字节

       2. 当客户端成功连接以后,使用RakString()发送一个字符串。在服务器端读取信息,打印出来。

       写完后,参考例子代码3

       客户端输出应该和前面类似。服务器端打印“Hello World”

       (C)lient or (S)erver?
       s
       Starting the server.
       A connection is incoming.
       Hello World

      要获得更多设置工程的信息,可以参考下一页:Compiler setup

     

     注:文章中有部分网页连接没有设置,对应英文查看相应连接。

 

     By   北洋小郭

 

你可能感兴趣的:(server,服务器,include,compiler,dependencies,output)