网络进阶

DirectPlay简介:
    DirectPlay是微软为解决网络通信所提供的一种解决方案.尽管DirectPlay在过去的许多版本中有许多的变化,到8.0,它为用户提供了一个非常容易使用的接口.下图是一个很好的解释:


一个IP地址有多个端口,将收到或者要发送的数据"分类";多个IP地址(在同一网络内)连接到一个路由器上.

网络对象:
  使用DirectPlay我们可以建立多种网络模型:客户端,服务器端,点对点连接.每一种模型都是由相应的对象来完成的.
  DirectPlay COM 对象 :
  IDirectPlay8Client      创建一个客户端对象,用于连接服务器
  IDirectPlay8Server      创建一个服务器对象,用于连接客户端
  IDirectPlay8Peer        创建一个网络接点对象,用于跟其它的接点相连接
  IDirectPlay8Address     创建一个IP地址对象
  当你创建了一个网络对象并且给它指定一个IP地址后,我们就可以利用这个对象跟其它对象连接或者等待其它对象跟自己进行连接.连接建立后就可以相互传数据了.每个对象我们可以理解为一个玩家.

与玩家的交互:
   在DirectPlay的术语里面,一个"玩家"就是一个单一的网络连接,从一个玩家的电脑连接到另一玩家或者是服务器.虽然一个电脑上可以有多个玩家,但是大多数情况下都是一个.事实上,为了更好的标示服务器,网络中的服务器也被看作是一个玩家.
   网络中的每个玩家都是一个ID,这个ID是为了互传信息而设置的,所以在我们的维护网络的程序中应该维护这些ID.
   在比较大的网络游戏中,有可能同时有很多玩家同时在线.为了提高维护这些玩家的效率,我们可以把一些玩家组成一组,然后就可以想对待一个玩家那样来对待这一组玩家。可以向这一组的玩家同时发送消息,而不是一个一个来发送,这样可以提高效率.对于可以分成的组数是每个小组中的成员数没有限制,不管你是如何分组的,有一点是很重要的, 就是当一个连接一旦建立后, 系统变可以跟玩家通过消息来交互.
网络中的消息:
   所谓消息其实就是一个数据结构,里面包含着一些特定的数据.消息的形式依赖于你所建立的网络模型,比如说,一个客户端不会接收发送到接点模型的消息.为了接收消息,你所创建的网络对象必须有一个回调函数,每当消息到来时就调用这个函数来处理消息,为了及时处理消息,这个函数应该在对消息进行一些简单处理后马上返回.
   为了发送消息,我们可以利用所创建网络对象的成员函数(send)来发送消息,这些函数都非常好用,他们的一些选项使我们可以让消息携带很丰富的信息.
      异步性和同步性:下面让我们来看看这些函数的选项里面的第一个选项:同步与异步.这意味着可以让函数在我们"点击"了发送命令后立即返回(异步),也可以是在将所有的数据都发送完毕后再返回(同步)。哪个是最好的选择呢?异步性在大多数情况下会为我们所采用.我们来看这样一个例子或许你就明白了:比如一个玩家要发送很多消息,如果是用同步方式就意味着在所有的消息发送完毕之前游戏要处于一种"暂停"状态,等消息发送完毕后再"返回"游戏.这样当然不是玩家喜欢的,他们希望的是发送消息的同时自己还能接着玩游戏--------这就是异步性带来的好处.
    安全性:
    玩家的消息中可能有很重要的数据,如果玩家的消息被人截获的话,可能给玩家造成巨大的损失.我们的选择是在发送消息的时候为消息加密,然后在接收消息的时候再解密,虽然这样做会让消息传输看起来更慢,但这样做是值得的,谁都不想让自己的劳动成果化为乌有.很幸运的是DirectPlay有内置的安全选项可以让我们很轻松的设置加密相关的操作.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值