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
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
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)游戏开发栏目,我将详细地为你解答。