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, 3和RELIABLE_ORDERED - 1, 2, 3, 4, 5, 6。
第五个参数,通常选择为0,不是很重要。
第六个参数,接收者的ID,直接用UNASSIGNED_PLAYER_ID 进行设置。
第七个参数,是否广播,有两个参数0和1,0表示不广播,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网络游戏开发(网络篇)(五)相关推荐

  1. 2D网络游戏开发(网络篇)(四)

    2D网络游戏开发(网络篇)(四)   作者:akinggw   在上一篇中,我们只是讲解了如何建立一个服务器或客户端.这一篇中,我们将讲解客户端如何和服务器进行连接.   #include " ...

  2. 2D网络游戏开发(网络篇)(六)

    2D网络游戏开发(网络篇)(六)   作者:akinggw   在前面的章节中,我们实现了一个简单的聊天室.今天,我们仍然要围绕这个主题,但采取别的方法,这个方法很有用,应该说是整个网络引擎的关键,它 ...

  3. 2D网络游戏开发(网络篇)(十)

    2D网络游戏开发(网络篇)(十)   作者:akinggw 前言   其实,我也很想将游戏开发简单化,可不管我怎么努力,游戏开发还是那么难,还是涉及那么多知识.同样,在这里,我也希望我的翻译和讲解能够 ...

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

    2D网络游戏开发(网络篇)(一)   来源: ChinaUnix博客 日期: 2006.05.26 11:16 (共有0条评论) 我要评论   作者:akinggw "2D网游开发" ...

  5. 2D网络游戏开发(网络篇)(二)

    2D网络游戏开发(网络篇)(二)   作者:akinggw 在上一章中,我简单的讲解了什么是Raknet,它有那些好处.在这一章中,我们将讲解如何在IDE中配置Raknet,并将测试一个程序. 由于R ...

  6. iOS开发网络篇—多线程断点下载

    iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  7. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  8. iOS开发网络篇—数据缓存

    iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以 ...

  9. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

最新文章

  1. Silverlight+WCF 新手实例 象棋 棋子(三)
  2. Day01 你如何保持健康
  3. MATLAB 循环子字符串
  4. 要尝试着多跟外界交流
  5. 华图砖题库php文件怎么打印_事业单位招聘考试《工会基础知识》试题库及答案1380题...
  6. 读取 配置文件_自动化测试中,如何读取配置文件内容?
  7. Ubuntu中打开.ipynb文件
  8. 环境安装_Python教程 Python环境安装
  9. 【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理
  10. AndroidStudio插件GsonFormat快速实现JavaBean
  11. 我的Java开发学习之旅------Java ClassLoader解析一(转)
  12. 解决VMware重启IP地址改变的问题
  13. 北京理工大学大学计算机课各章节答案,北京理工大学 材料力学课本答案 第一次课(1[1]5+05学.pdf...
  14. win10自带抓包工具_Win10商店抓包工具(UWP挖掘机)下载 v1.1
  15. oracle dbf文件迁移,Oracle安装盘空间不足,对.DBF文件进行迁移
  16. xp升级到win7傻瓜教程_MeGUI教程-软件环境配置(转)
  17. handsome主题添加服务器信息,handsome主题部分常用markdown语法
  18. MIUI9系统详细刷成开发版启用root权限的教程
  19. 一阶贝塞尔函数matlab,一阶贝塞尔函数
  20. python爬取豆瓣电影信息

热门文章

  1. 还不会漏洞上传吗?一招带你解决
  2. 微信开发php代码_微信开发代码
  3. excel一列中某一数据第一次出现的位置(使用match实现)
  4. 【闲谈】暴露IP地址有危险吗?可查到你下过的小电影
  5. Http请求被拒绝,响应返回 The requested URL was rejected. Please consult with your administrator.
  6. android 中downloadmanager学习
  7. 洛谷P1346 电车
  8. 购买了云服务器怎么完成备案?
  9. 海信电视使用优酷投屏的方法
  10. Fire! UVA - 11624