2D网络游戏开发(网络篇)(三)

原创 2006年06月22日 11:35:00
2D网络游戏开发(网络篇)(三)
 
作者:akinggw
 
在前面的章节中,我们已经讲解了Raknet是什么,如何在DC中配置Raknet,并测试了我们的第一个程序。
在这一篇中,我们将讲解Raknet的函数,并将写出我们的第一程序。
因为Raknet是基于Berkeley SocketsWinsock开发的,所以它支持WINDOWS系统和LINUX系统。可以在局域网,因特网上运行。
当今的游戏大多支持两种模式的网络连接:对等模式和客服端/服务器模式。其实,在现今的在线休闲游戏中,这两种模式都支持。
Raknet支持上述的两种模式。
 
在网络上,我们传输信息一般都是依靠TCP/IP协议的,而TCP/IP协议中传输信息的协议又包括TCP和UDP。
TCP是指的什么呢?它是指的面向连接的虚电路协议。也就是说,它在发送数据之前,要和用户建立连接,并一直保持和用户连接,然后发送数据,并不断询问用户是否收到正确的数据,如果不正确,就重发,直到正确为止。
UDP又是指的什么呢?它是指用户数据报协议,它在发送数据之前,先和用户建立连接,连接建立好以后,并不一直保持和用户的连接,然后发送数据,也不管对方是否收到数据,然后关闭连接。
从上面的描述可以看出TCP是相当可靠的一种连接方式,但它并不适合于游戏中。你可以想一下,如果一个玩家和服务器建立TCP连接,那么要等到这个用户断开和服务器的连接以后,其它用户才能使用服务器。这显然是不行的。
而UDP能做到和多个用户同时通信。例如,一个玩家要取得他的个人资料,然后他向服务器发出一个请求,服务器用UDP回答他,并关闭和他的连接;服务器然后就可以处理其他玩家的信息了。
 
我们在本例中要使用三个头文件:
 
RakClientInterface.h
RakNetworkFactory.h
RakServerInterface.h
 
第一个头文件包含了建立客服端所需要的信息,其中包括客服端的建立,连接和数据的发送和接收。
第二个头文件用于管理我们在程序中使用的类,包括类内存分配和类内存的释放。
第三个头文件用于建立服务器所需用的信息,包括服务器的建立,连接和数据的发送和接收。
 
char str[512];
RakClientInterface *rakClientInterface;
RakServerInterface *rakServerInterface;
 
str[512]是用来判断我们是要建立服务器还是客户端。接下来就声明一个客户端实例和一个服务器实例。
 
printf("(C)客服端 (S)服务器?n");
gets(str);
if (str[0]=='c')
{
       rakClientInter>
       rakServerInter>
       printf("客服端已经建立。");
}
else
{
       rakClientInter>
       rakServerInter>
    printf("服务器已经建立。");
    }
 
得到一个输入值,如果输入值为c,就建立客户端,然后将服务器实例设置为空,如果输入值为其它,就建立服务器,然后就将客户端实例设置为空。
 
RakNetworkFactory::GetRakClientInterface(); 初始化一个客户端实例,为它分配内存;
RakNetworkFactory::GetRakServerInterface(); 初始化一个服务器实例,为它分配内存;
 
最后,程序执行完成,我们就需要释放掉我们刚才分配的内存。
 
if (rakClientInterface)
       RakNetworkFactory::DestroyRakClientInterface(rakClientInterface);
else if (rakServerInterface)
       RakNetworkFactory::DestroyRakServerInterface(rakServerInterface);
 
完整的程序代码如下:
#include "stdio.h"
#include "conio.h"
#include "raknet/RakClientInterface.h"
#include "raknet/RakNetworkFactory.h"
#include "raknet/RakServerInterface.h"
 
int main(void)
{
char str[512];
RakClientInterface *rakClientInterface;
RakServerInterface *rakServerInterface;
 
printf("(C)客服端 (S)服务器?n");
gets(str);
if (str[0]=='c')
{
       rakClientInter>
       rakServerInter>
       printf("客服端已经建立。");
}
else
{
       rakClientInter>
       rakServerInter>
    printf("服务器已经建立。");
    }
 
// TODO - Add code body here
getch();
 
if (rakClientInterface)
       RakNetworkFactory::DestroyRakClientInterface(rakClientInterface);
else if (rakServerInterface)
       RakNetworkFactory::DestroyRakServerInterface(rakServerInterface);
return 0;
}
 
程序执行结果如图,你可以建立客户端或服务器:

 

 
 
关于更多内容请访问金桥科普网站( http://popul.jqcq.com  )游戏开发栏目,如你需要游戏开发方面的书籍请参考金桥书城游戏频道(http://book.jqcq.com/category/1_70_740.html )。 如果你在阅读本篇文章时有什么好的建议请来信给我,我的E_mail: akinggw@126.com. 如果你在使用SDL时有什么问题,请到金桥科普网站(http://popul.jqcq.com  )游戏开发栏目,我将详细地为你解答。
 

2D网络游戏开发(网络篇)(一)

2D网络游戏开发(网络篇)(一) 作者:akinggw “2D网游开发”,我有时都觉得这个标题包含的内容太多,要实现起来也太难。于是,我决定将它分门别类,我按照我要实现的一个网络游戏将它分成下面几个部...
  • akinggw
  • akinggw
  • 2006年06月22日 11:32
  • 3368

C# Socket编程笔记

看到这个题目,是不是很眼熟?在博客园里搜下,保证会发现关于这个东东的文章实在是太多了~~~真得是没有写得必要,而且我也有点懒得去琢磨字句。(看到这,肯定得来个转折的了,不然就看不到下文了,不是吗)但是...

2D网络游戏开发(网络篇)(一)

2D网络游戏开发(网络篇)(一) 来源: ChinaUnix博客  日期: 2006.05.26 11:16 (共有0条评论) 我要评论 作者:akinggw“2D网游开发”,我有时都觉得这个标题包含...

cocos2d-x商业级单机游戏和网络游戏开发系列

引言 接触coco2d-x已经一年多了,期间陆陆续续开发了很多的游戏,包括单机的小游戏和网络卡牌游戏。cocos2d-x是一个快速发展的引擎,除了经常的主引擎的更新之外,社区内也经常涌现出新的插件,...

3D网络游戏开发实践

  • 2010年05月26日 10:50
  • 182KB
  • 下载

Unity3D游戏开发之网络游戏服务器架构设计培训(如何做一名主程)

如何做一名好主程

Android网络游戏开发实战.part2

  • 2017年06月08日 12:56
  • 54.3MB
  • 下载

FSM:网络游戏开发中的有限状态机(实践篇)

上一篇文章《FSM:网络游戏开发中的有限状态机(理论篇)》中,讲解了FSM的基础知识。这里,我结合图形及具体例子,讲解下FSM在实际开发中的运用。 首先,图解下上篇文章中提到的各种action。 1....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2D网络游戏开发(网络篇)(三)
举报原因:
原因补充:

(最多只允许输入30个字)