war3联机对战原理以及T人挂原理简述

     魔兽是游戏数据传输时基于TCP连接,此时主机作为TCP的服务端,非主机是客户端。但是没办法在Internet上实现两个非服务器主机之间的直接TCP连接(这个可以看P2P的实现原理)。那对战平台是怎么实现在Internet上通过War3的局域网模式连接对战的呢?

     简单来说是如果A建了一个主机,B要进A的主机,A通过平台转发过来的消息知道B要连接主机,就在自己本地创建一个TCP的客户端,让这个客户端与war进程的服务端连接,在魔兽中就相当于有玩家B连接进A主机建立的游戏,同时B主机在自己本地创建一个TCP服务端,让War进程的TCP客户端连接到自己本地的服务端。既然都是在本地建立的TCP连接,那么怎么实现主机和非主机的游戏数据交换的呢??

  从上面的图可以看出,War3主机和非主机的数据交换,其实是在两个本地模拟创建的TCPsever和TCPClient之间进行的,当主机有数据要发给非主机,先会将数据发给主机本地的TCPClient,然后对战平台会从TCPClient数据缓冲池中取出数据,通过UDP的方式,发给非主机,非主机会将UDP数据放入TCPServer的发送数据缓冲池,由它发给魔兽进程中的TCPClient,反过来一样,这样就实现了魔兽数据的完成传输,Internet上的联网对战也就实现了。

   另外说一下T人挂的原理,为什么主机可以T人呢?为什么主机只是关闭本机的TCP连接就可以把远程的非主机玩家T出游戏呢?从上图我们应该可以获得答案。如果主机关闭了本地用来接受远程非主机传输的UDP信息的那个TCPClient,那么很显然,主机将不能获得这个非主机信息,远程的那个非主机也不能收到主机转发的游戏数据包了,这个时候这个非主机War3进程理所当然的认为自己与主机失去了连接,T人挂的目的也达到了。

posted @ 2011-11-18 18:39  小马喝水  阅读(596)  评论(1编辑  收藏  举报