帮助手册
工程设置
在教程中,所有的图片和界面参考的是VS2005,微软版权。同等参数配置你的编译器。
1. 创建Win32控制台工程,将它命名为ChatServer
2. 选择控制台应用程序,以及空工程。选择Windows应用程序也是可以的。
3.加入RakNet源文件到工程中。可以右键点击工程名字,选择Add,然后是Exiting标签。浏览到你下载的RakNet,转到源码目录,点击shift键,选择第一个文件,然后点击最后一个文件,点击OK。
4. 在工程中加入一个main文件。右击工程名,选择Add,然后选择New标签。在VisualC++选择C++file,命名为main.cpp。
5. 因为我们将文件放到了目录而不是工程中,需要包含目录到include路径,这样我们不需要在每次#include时输入完整的路径。右键点击“Chat Server”工程名字,选择属性,在顶端选择下拉菜单,选择“All Configurations”,选择C/C++/General/Additional Include Directory。将rakNet的路径加到Additonnal directory一项,然后点击OK。
6. 下一个 连接ws2_32.lib,从同一个对话框,选择Linker/General,加入到Additional Dependencies 中
7. 修改字符集为not set。这个是基于strings的数组使用的,与Unicode和宽字符集相对。
教程代码实现
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 北洋小郭