UCBUG游戏网-最安全的绿色下载站点!

ucbug游戏网 > 新闻中心 > 游戏开发 > → 网络游戏通讯模型初探(3)

网络游戏通讯模型初探(3)

作者:admin 来源:未知 时间:2009-10-09 15:56


  让我们来说明一下上面简单网络ucbug游戏网模型的运行机制。先来讲讲服务器端,这里服务器端分为三个部分(实际上一个完整的网络ucbug游戏网远不止这些):登入模块、ucbug游戏网模块和登出模块。登入模块用于监听网络ucbug游戏网客户端发送过来的网络连接消息,并且验证其合法性,然后在服务器中创建这个玩家并且把玩家带领到ucbug游戏网模块中; ucbug游戏网模块则提供给玩家用户实际的应用服务,我们在后面会详细介绍这个部分; 在得到玩家要离开ucbug游戏网的消息后,登出模块则会把玩家从服务器中删除,并且把玩家的属性数据保存到服务器数据库中,如: 经验值、等级、生命值等。

  接下来让我们看看网络ucbug游戏网的客户端。这时候,客户端不再像单机ucbug游戏网一样,初始化数据后直接进入ucbug游戏网,而是在与服务器创建连接,并且获得许可的前提下才进入ucbug游戏网。除此之外,网络ucbug游戏网的客户端ucbug游戏网进程需要不断与服务器进行通讯,通过与服务器交换数据来确定当前ucbug游戏网的状态,例如其他玩家的位置变化、物品掉落情况。同样,在离开ucbug游戏网时,客户端会向服务器告知此玩家用户离开,以便于服务器做出相应处理。


以上用简单的伪代码给大家阐述了单机ucbug游戏网与网络ucbug游戏网的执行流程,大家应该可以清楚看出两者的差别,以及两者间相互的关系。我们可以换个角度考虑,网络ucbug游戏网就是把单机ucbug游戏网的逻辑运算部分搬移到ucbug游戏网服务器中进行处理,然后把处理结果(包括其他玩家数据)通过ucbug游戏网服务器返回给连接的玩家。

网络互连

  在了解了网络ucbug游戏网基本形态之后,让我们进入真正的实际应用部分。首先,作为网络ucbug游戏网,除了常规的单机ucbug游戏网所必需的东西之外,我们还需要增加一个网络通讯模块,当然,这也是网络ucbug游戏网较为主要的部分,我们来讨论一下如何实现网络的通讯模块。

  一个完善的网络通讯模块涉及面相当广,本文仅对较为基本的处理方式进行讨论。网络ucbug游戏网是由客户端和服务器组成,相应也需要两种不同的网络通讯处理方式,不过也有相同之处,我们先就它们的共同点来进行介绍。我们这里以Microsoft Windows 2000 [2000 Server]作为开发平台,并且使用Winsock作为网络接口(可能一些朋友会考虑使用DirectPlay来进行网络通讯,不过对于当前在线ucbug游戏网,DirectPlay并不适合,具体原因这里就不做讨论了)。


  确定好平台与接口后,我们开始进行网络连接创建之前的一些必要的初始化工作,这部分无论是客户端或者服务器都需要进行。让我们看看下面的代码片段:

WORD wVersionRequested;
WSADATAwsaData;
wVersionRequested MAKEWORD(1, 1);
if( WSAStartup( wVersionRequested, &wsaData ) !0 )
{
 Failed( WinSock Version Error!" );
}


  上面通过调用Windows的socket API函数来初始化网络设备,接下来进行网络Socket的创建,代码片段如下:

SOCKET sSocket socket( AF_INET, m_lProtocol, 0 );
if( sSocket == INVALID_SOCKET )
{
 Failed( "WinSocket Create Error!" );
}


  这里需要说明,客户端和服务端所需要的Socket连接数量是不同的,客户端只需要一个Socket连接足以满足ucbug游戏网的需要,而服务端必须为每个玩家用户创建一个用于通讯的Socket连接。当然,并不是说如果服务器上没有玩家那就不需要创建Socket连接,服务器端在启动之时会生成一个特殊的Socket用来对玩家创建与服务器连接的请求进行响应,等介绍网络监听部分后会有更详细说明。

 

  有初始化与创建必然就有释放与删除,让我们看看下面的释放部分:

if( sSocket != INVALID_SOCKET )
{
 closesocket( sSocket );
}
if( WSACleanup() != 0 )
{
 Warning( "Can't release Winsocket" );
}