目的
测试我写的局域网发现demo的可用性和稳定性,特别是网络切换等case;
我demo的实现请看 局域网发现设备代码实现:udp组播
测试环境搭建
自己搭建一个路由器环境,一根网线,电视,手机即可;
测试用例
由于网络状态变化分为有线、Wi-Fi、无网 三者切换,以及wifi中不同wifi 网络之间的切换;
如果只是移动设备,则不用测试有线的切换;但是我的使用者有电视设备,所以也需要测试;
如果是由A发现B,我列举些网络切换的case:
1. A和B都连接上同一wifi,A能发现B;
2. 基于1,A 切换到另一wifi,A无法发现B;
3. 基于2,A又切回该wifi,A能发现B;
4. 基于1,B 切换到另一wifi,A无法发现B;
5. 基于4,B又切回该wifi,A能发现B;
6. 基于1,A断开wifi,A无法发现B;
7. 基于6,A再打开该wifi,A能发现B;
8. 基于1,B断开wifi,A无法发现B;
9. 基于8,B再打开该wifi,A能发现B;
10. A通过有线连接到路由器C,B通过无线连接到C,则A能发现B;
11. 基于10,A关闭有线,通过无线连接C,A能发现B;
12. 基于11,A再切换回有线连接C,A能发现B;
测试结论
- 先说遇到的坑1,使用公司wifi环境
- 我开始使用的是公司wifi环境,换了3个wifi,手机均无法发现电视,手机和手机之间,大部分时候能相互发现,无法发现也是因为udp丢包;
- 之后我折腾了一会想查原因,首先得检测电视和手机是否在同一个局域网;不是同一个wifi的我就不管了,关键是在同一wifi的为啥还收不到呢?网上说可能和防火墙、路由配置啥的有关,但是是公司环境,这些都无法查起;
- 对于连接公司同一wifi,但是不是同一子网,我想通过给手机配置静态ip来使它们在同一字网,但是我发现也不可行,并且配置后手机上不了网,后来我用路由器搭的wifi,再试是可行的,怀疑是公司对使用静态ip做了限制;
- 静态ip设置成功,上不了网
综上:还是建议大家使用自己搭建的wifi环境,比较纯粹,公司的大wifi环境不适合;
- 出现问题,java.net.SocketException: setsockopt failed: ENODEV (No such device)
是因为调用MulticastSocket.joinGroup() 抛的
开始以为是代码问题,后来发现是手机设置了静态ip,取消静态ip设置就好了;