由于微软不再支持XP,只好做软件升级,换了编译平台,换了操作系统,现在支持WIN7了。
试用版发布已经有一段时间了,昨天突然被告知WIN7有一软件的网络冗余无效,大伙都惊呆了。急匆匆的跑去测试部,自己跑了一遍,确认真的是无效了。随后便开始了问题的诊断分析。
问题现象:
XP上运行,两个网络接口都能正确加入组播网,读到组播数据;
WIN7运行,同时插上两条网线,只有一个接口能读到数据;只插一条网线,无论插在哪个接口,都能读到数据,但这不符合我们的冗余要求。
问题分析:
1.既然XP上能正常运行,那会不会是某些API的参数在WIN7有点不同呢?
2.同时插上两条网线,软件只能从一个适配器接口获取到数据包,是不是有可能另外一个接口根本没有收到数据包?
3.如果另外一个接口没有收到数据包,会不会是发送方本来应该将发往两个网卡的数据包发到了同一个网卡上?
4.会不会是组播IP地址搞错了?
问题解决:
1.用WireShark抓组播包,我们使用的组播地址是225打头的,掩码24位。结果发现,两个网卡上都能抓到数据包,这是为啥捏,为啥软件就收不到呢?
既然计算机收到数据包了,那2,3点就排除了。
2.调试代码,检查逻辑,检查API调用,发现均没有错误输出。由于没有收到数据包,软件一直在等待超时,等待超时。。。
3.对组播不是很了解啊,只知道,大家可以加入到组播组,然后其中一方发一个数据包到该组播组,大家都能收到,不像P2P需要重复发送多次。只能搜了。
4.找了一天解决方案,都没找到,后来还是同事找了个ROUTE的方案,纯属抱着试试的态度试试。原来真的行!
解决方案:
用route