昨天更新以后很多同学都出现了UDP连接失败的问题,现象就是在选择频道后10秒左右游戏报UDP错,然后退出。
问题多发生在有路由NAT的情况下,实际上很多人跳过NAT后就可以正常游戏了。但是毕竟网吧、公司都不会为一个人服务吧,而且我自己的问题更严重,跳过NAT问题依旧。眼见TX办事不力,XE泛滥的又不是时候,估计TX没空搭理这事儿,只能自己想办法解决了
当然用最原始的办法,抓包看游戏过程咯,因为自己登陆不能,所以是让好友把抓包结果发来分析的
最后疑点定位在:
我自己失败的情况 -- 在选择完频道进入角色选择画面后,抓包结果中能看到本地源端口5063往服务器连续发送了大量的UDP包,内容只有1字节,01,感觉就是探测连接用的,但是服务器没有任何回应消息(当然对于UDP来说并不需要握手,所以只是我之前猜测的),10秒后本地报错,同时发送TCP RST给服务器,完蛋..
好友成功的情况 -- 在选择完频道进入角色选择画面后,抓包结果中能看到本地源端口5063往服务器连续1个的UDP,内容和我的一样,服务器马上回应了一个UDP包,内容7字节,随后还有几个简单得UDP交互,正式进入游戏后,本地5063每10秒发送一个UDP给服务器,这些我们就不管了...关心出问题的时间是关键
综上大致可以估计出,是由于本地一直收不到服务器的UDP包才会导致的连接失败,本地发送给服务器是没有问题的,这样也就有了解决办法,自己构造UDP包骗过本地即可,其实到这个阶段也不确定即使通过了死亡10秒,是否在游戏中还有定时炸弹,但是测试后暂时没有发现问题
好了,罗嗦了半天,实际解决办法如下,广一测试成功,因为UDP包内并没有携带服务器信息,所以理论上其他服务器也适用(当然服务器返回的7字节信息我并不知道是什么内容,也不排除有服务器信息,不过7字节也太少了....)
自己构造UDP包:
源地址就是本地地址,源端口2311
目的地址还是本地地址,目的端口5063
UDP包的内容: 02 0f 0b 8a 77 c7 13
发送时机:选择完频道进入角色选择后发送2~3次即可
工具选择:自己找啦
我原来以为WPE能用,结果发现只能走TCP,装了Sniffer又蓝屏,最后整了一个很土的工具.....见下,想和我一样土的话baidu这个工具即可