APP over QQ BATTLE ZONE

最近发现和小女的连接速度慢(是delay大的关系),打算研究一下SOCKS5,经过一番努力(实现本身并不复杂),发现缺少必备的硬件环境,服务器,本来是想用JAVA的服务器可以部署在GOOGLE的APP上,忘了不可能支持SOCKET的(否则乱开端口拉)放弃SOCKS5方案。

郁闷了二天之后想到可以用QQ对战平台实现联机,结果和小女一试验居然没有响应……,怀疑是不是其中的TCP部分被qq给干掉了??猜的,就用UDP模拟了一个简单的信令,没想到依然不行……随后GOOGLE,发现对战平台的原理是平台开发者HOOK掉“一部分”的API实现的……那么如果不HOOK我使用的OVERLAPPED(重叠)模式,那等于是空的……

说来也好笑,不论那个游戏客户端(星际、红警、魔兽、微软他自己的帝国),到目前为之并没有使用过overlapped,所以平台大概只支持berkerly风格的WINSOCK而已!(用depends看来一下),随后碰运气去找找其他的平台,HF也类似,比QQ悲剧的时候不支持的函数直接宣告异常崩溃:(,另外VS不知道如何获得用户的IP(似乎和QQ等平台实现原理不同……)

静下来想想,还是先研究一下QQ平台的模拟情况好(QQ号方便,然后广告少得多拉),做了如下的试验:用一个server和一个client,相互ping
(1) UDPPackPing,纯粹用UDP做,发现QQ平台可以正常运行,但是注意到每一个包收到以后,打头居然会有额外的7个字节头!(很奇怪,其他游戏居然可以正常运作),4个字节表示IP(网络序),2个字节表示端口(网络序),一个字节必定是0X75;
(2) UDPPackPingQBZ在(1)的基础上追加指定偏移、打印开关、填充字段等;
(3) UDPOLPackPingQBZ,使用OVERLAPPED方式进行数据通讯,不通;
(4) TCPPackPing,用TCP模拟(1)实现,结果无论如何找不到服务器:(;
情况基本掌握,只是那个7个字节的情况很悬疑,估计作为参数导入好了……

想来想去还是自己用WINSOCK1.1模拟一套WINSOCK2的机制较为容易修改,结果先弄了一套三线程分别处理PUSH READ POP的链表模型(占用80%的时间|||),无琐,还不确定100%无问题;然后装模做样的弄了wsasend和wsarecv,之间还是碰到不少问题拉……
分别弄了
(1) UDPPackPingWSAQBZ,这个是事件版本的WSA异步收发UDP(TCP不清楚是否支持)
(2) UDPPackPingQBZRoutine,这个是完成例程版本的WSA异步收发UDP(TCP同样不清楚),目前可以用QBZ正常跑了……转眼一个周过去了……

接下来才是重头戏- -能不能够合入到原来的系统中去呢……下回再说~~

猜你喜欢

转载自lwwin.iteye.com/blog/767638