对战平台虚拟War3局域网的原理 收藏

以War3为例,启动魔兽后,首先是如何看见主机的问题:
魔 兽是通过TCP/UDP协议进行数据发送的,那如何实现看到对方?我们这样:每个机器监听一个固定的UDP端口(比如6112),一旦任何机器建立主机, 它就向整个局域网所有的机器的6112端口广播“我建立了主机”的信息,这样,其他机器接收到这个信息,就知道有主机建立了(广播只存在于UDP协议,使 用UDP.sendto向地址255.255.255.255实现)。

来看看HF和VS平台怎么实现的:
      1.挂钩UDP.Sendto,将所有广播信息(即发向地址255.255.255.255)的消息截获,然后把消息重新打包(比如{本机虚拟IP+消息 数据}的形式),然后使用真正的UDP.sendto把消息转到平台服务器,服务器查看有哪些玩家是跟此玩家在同一房间,把消息传给那些玩家;平台再挂钩 住接收消息用的UDP.recv From,把UDP.recvFrom的发送方地址修改为消息中的对方虚拟IP,再把数据传给真正的UDP.recvFr om。

问:万一广播信息不是建立主机而是其他的,被误截了怎么办?
    答:大部分游戏包括War3的广播信息唯一的作用就是传播“建立主机”这一类需要传给所有局域网的机器的信息,就是说只有“建立主机”这一类信息会通过地址255.255.255,因此一般不会有误截发生。

实际上通过广播的信息还有主机是否人满,地图,主机是否取消建立,等信息。

其次,如何加入游戏:
    魔兽在加入游戏后使用TCP协议,每个玩家对应一个连接。
在 真正的局域网中,一个玩家看到和选择一个主机后点击加入,他的机器会使用TCP请求和对方连接,(地址从UDP中获得,端口是固定的6112),如果没有 人满,被主机关闭等意外发生,主机就会答应此连接(使用TCP.accept),发送些数据(地图信息,其他玩家信息等),此玩家就加入了游戏,此后两机 器就使用这个TCP连接通讯。

回到平台,在平台中,魔兽从UDP中获得的地址是服务器的地址啊(因为UDP信息是服务器转过来的),这样发起的TCP只能链接到服务器,怎么可能连接得 上真正的玩家呢?别忘了,上面说过平台挂钩了UDP.sendTo(会把本机虚拟IP加入);挂钩了UDP.recvFrom(会把服务器这个发送方的 IP改为对方虚拟IP);

接着魔兽向对方虚拟IP发起TCP.connect,可能成功吗?当然不可能,因为实际的局域网中根本没这个IP,那怎么请求连接和接受连接呢?
 
    平台采用了这样的办法:TCP连接是靠TCP.connect发起的,平台挂钩住这个函数,把连接向服务器的地址修改为自己(即127.0.0.1或实际 IP,一般用前者),然后再挂钩TCP.accept函数(此函数用来接受TCP连接),然后发送同样的连接请求由服务器转到另一台机器(即主机),根据 那台机器的做法决定是否答应127.0.0.1的那个TCP.connect,(注意这个TCP.accept返回的新连接是挂钩代码创建的,挂钩的代码 拥有它收到的所有数据),如果答应连接的话,是不是魔兽所有的数据就会发送到这个挂钩代码创建的连接这里了?
    接着,挂钩代码把这些数据重新打包(例如{接收方机器的虚拟IP+发送数据+发送方的虚拟IP}的形式),使用UDP.sendto发到服务器,服务器从信息中获得接收方机器的虚拟IP,查找其真正的IP,并把数据发送过去,跨网的TCP发送就完成了。
    (另外一台机器也按以上方法同样处理)

转载于:https://blog.51cto.com/2858827/517272

对战平台虚拟War3局域网的原理相关推荐

  1. 局域网对战平台 linux,在Linux下可用Wine安装和运行完美对战平台、金山游侠2002体验版...

    在Linux操作系统下可用Wine安装和运行完美对战平台.金山游侠2002体验版.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用完美对战平台和金山游侠2002体验版了, ...

  2. 两台虚拟服务器如何级联,[教程] 利用open vswitch建立vxlan隧道实现不同主机上的虚拟交换机级联...

    写在开头 在某些环境下,需要实现两台物理机中的openvswitch交换机级联,以实现两台交换机中的设备互相通讯,这里使用vxlan隧道技术,将数据包封装在UDP中,通过以太网实现数据包传输. VXL ...

  3. 对战平台有哪些和到底哪个好?

    对战平台专题为大家推荐一些非常热门的游戏对战平台下载大全,新手玩家搞不清游戏对战平台有哪些和到底哪个好? 推荐软件:浩方电竞平台 浩方电竞平台是世界上最大的网络游戏对战平台,让喜欢网游.电竞的朋友可以 ...

  4. 浩方、vs 等对战平台的危险

    近日在家通过台网玩测试版<星际争霸2>,发现每次都得连线注册,不仅联想了一些事情. 1.浩方.vs 等对战平台的危险 当然在教育网还常用AA,这些对战平台其实大都是依附于 局域网对战游戏. ...

  5. VMware 虚拟机 使用桥接模式 与另一台电脑建立局域网

    VMware 虚拟机 使用桥接模式 与另一台电脑建立局域网 今天想用VMWare 虚拟机中的linux 系统与另外一台电脑建立一个局域网,试了半天搞不定,网上看了些教程,觉得这篇很有用,转载上来,供参 ...

  6. 【React深入】深入分析虚拟DOM的渲染原理和特性

    导读 React的虚拟DOM和Diff算法是React的非常重要的核心特性,这部分源码也非常复杂,理解这部分知识的原理对更深入的掌握React是非常必要的. 本来想将虚拟DOM和Diff算法放到一篇文 ...

  7. 一个虚拟服务器装多个网站,一台虚拟主机 如何放多个网站

    通常一些个人站长可能同时拥有几个网站,由于其他几个网站流量不高,而每个网站都租用一个虚拟主机空间的话,感觉有点浪费.所以,大家可能会想虚拟主机能不能也像独立服务器那样放置多个网站呢?答案是肯定的.下面 ...

  8. 游戏对战平台搭建要选什么服务器

    游戏对战平台搭建要选什么服务器 服务器是游戏平台数据传输的重要载体,事关我们游戏创业发展的稳定性.安全性.那么,游戏平台搭建要选什么服务器?有什么参考指标?本文艾西将带领大家一探究竟! 首先是&quo ...

  9. 服务器怎样创建多台虚拟主机,服务器是如何实现多台虚拟主机

    服务器是如何实现多台虚拟主机 内容精选 换一换 弹性云服务器(Elastic Cloud Server)是一种可随时自动获取.计算能力可弹性伸缩的云服务器,可帮助您打造可靠.安全.灵活.高效的应用环境 ...

最新文章

  1. 树莓派 ROS 段错误
  2. remoting和webservice的区别
  3. outlook 未安装信息服务器,Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64...
  4. 学习AOP 之前必须明白的几个概念
  5. [蓝桥杯2019初赛]年号字串-数论+模拟
  6. XState Viz 可视化和调试状态机
  7. Selenium 屏幕截图
  8. MATLAB信号处理之信号的积分和微分
  9. STM32编译环境、建立工程模板以及程序下载
  10. 百度智能云发布『乘风』 端云一体化方案 助力人脸应用10分钟落地
  11. oracle安装过程中内核参数详解
  12. DPDK - 海光(hygon) 3250 l2fwd 性能测试
  13. 港澳台手机号正则表达式
  14. 如何更改iPhone备份和iTunes MobileSync备份文件夹的位置
  15. 基于Java毕业设计游戏销售系统源码+系统+mysql+lw文档+部署软件
  16. Strings, bytes, runes and characters in Go
  17. 一幅长文细学Vue(一)——Webpack打包工具
  18. Struts 2.0相关知识 摘自Struts2权威指南(李刚 著)
  19. 如何用css写回到顶部,css3 回到顶部书写
  20. LPC1788 U盘读写及IAP的实现 第一章

热门文章

  1. 温故知新-什么是软件工程
  2. 极客日报:腾讯宣布捐赠1亿元驰援河南;苹果回应iPhone 安全隐患;贝索斯完成10分钟太空之旅
  3. 基于信创运维平台,实现国产化网络自动巡检
  4. Domino蓝色多瑙河版本
  5. 区块链现在的样子:当年的DOS操作系统
  6. 使用CAD镜像和修剪命令绘制图形
  7. 在python中get是什么意思_python get函数有什么作用?示例解析
  8. 如果你画了一个圆被挤扁了
  9. 小米手机5s获得root权限的经验
  10. 我悟出了公众号取名的套路