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

原创 2006年06月22日 11:37:00
2D网络游戏开发(网络篇)(五)
 
作者:akinggw
 
在第四篇中,我们学习了如何使用raknet进行服务器和客户端的连接,在这一篇中,我们将讲解如何让客户端和服务器进行通信,比如说聊天。
好吧,其实我已经知道你等不及了,那就让我们开始吧。
程序代码和“2D网络游戏开发(网络篇)(四)”中的一样,只是我们需要在其中添加一些内容。
在进入循环之前,我们需要定义一个信息变量,用于存储我们将要发送的信息。
    char message[2048];
 
进入循环,在循环开始处,也就是接收信息之前,添加下面代码:
 
if(kbhit())
 { 
 gets(message);
        
 if(rakServerInterface)
    {
     rakServerInterface->Send(message, (const int) strlen(message)+1, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_PLAYER_ID, true);
     }
 else
    {
     rakClientInterface->Send(message, (int) strlen(message)+1, HIGH_PRIORITY, RELIABLE_ORDERED, 0);
     }
 }
 
好吧,让我们来分析一下上面这段代码。
kbhit()用于监测是否有按键,如果没有,先得到信息,保存在message中,然后监测你建立的是服务器还是客户端。
如果是服务器,就用服务器发送数据,相反就用客户端发送数据。
下面我们来具体分析一下服务器的send()函数:
第一个参数,指向你要发送的数据;
第二个参数,你发送的数据的大小,也许你就会问,为什么要加一个1呢?那是因为我们的数据都是按照数据流发送的,如果你不在数据之间留下空格,网络引擎就无法分辨出数据,所以我们要在每个数据之后加上一个空格。也就相当于把一根线切成一截一截的。
第三个参数,用于设置你发送数据的重要性,一共有三个参数:
 
HIGH_PRIORITY
MEDIUM_PRIORITY
LOW_PRIORITY
 
分别是重要性高,中,底。网络引擎在发送数据时,首先要将数据排队,按照他的重要性来发送,重要性高的先发送,否则就后发。
第四个参数,可靠性,一个有五个参数:
UNRELIABLE - 5, 1, 6
UNRELIABLE_SEQUENCED - 5
RELIABLE - 5, 1, 4, 6, 2, 3
RELIABLE_ORDERED - 1, 2, 3, 4, 5, 6
RELIABLE_SEQUENCED - 5, 6
可靠性又表示什么呢?也就是在网络引擎发送数据时,如果你选择可靠的发送数据,那么数据就会按照正确的循序到达,而如果选择不可靠,那么数据可能就是无续的到达了。
通常使用的有RELIABLE - 5, 1, 4, 6, 2, 3RELIABLE_ORDERED - 1, 2, 3, 4, 5, 6
第五个参数,通常选择为0,不是很重要。
第六个参数,接收者的ID,直接用UNASSIGNED_PLAYER_ID 进行设置。
第七个参数,是否广播,有两个参数010表示不广播,1表示将这条信息发送到和服务器连接的所有客户端。
 
rakClientInterface的send函数和服务端的参数是一样的,只是少了最后的两个。
 
最后,我们还得修改下面的内容:
default:
之下,将程序修改成如下:
   printf("%sn", packet->data);
                   
 if(rakServerInterface)
 {
     sprintf(message,"%s",packet->data);    
      rakServerInterface->Send(message, (const int) strlen(message)+1, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_PLAYER_ID, true);              
  }
 
第一条语句是打印我们收到的数据;
如果我们建立的是服务器,那么就将我们接收到的数据转换成char格式,(因为packet->data的数据格式是unsigned char),然后将这条数据广播给服务器中所有的客户端。
 
到这里,我们的程序完成,运行效果如下:
服务器:

 

 
图注1
客户端1:
 
图注2
客户端2
 
图注3
OK,今天的内容就到这里了,祝你们周末玩得高兴,玩得愉快!
 
关于更多内容请访问金桥科普网站(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网络游戏开发(网络篇)(一) 来源: 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....

cocos2d-x 开发网络游戏(http post&socket)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=274 最近开发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2D网络游戏开发(网络篇)(五)
举报原因:
原因补充:

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