目录
本篇主要站在应用的角度来分析几种方案。
网上也有些过很多种方案,这里只是挑选几种方案分析对比下。
本质:通过netid与socket绑定的方式来创建多通道(Wi-Fi Socket/Cellular Socket)
方案一:setsocketopt
Java层通过Android接口获取并传递netid,C++创建Socket和set netid。
1. C++层创建Socket,Java层监听数据网和Wi-Fi各自对应的netid,并将各自的netid通过JNI传递到C++层;
2. C++层调用setsocketopt()函数将数据网创建的Socket打上数据网的netid标记,将Wi-Fi创建的Socket打上Wi-Fi的netid标记;
3. 后面传输数据时调用打了数据网netid标记的Socket就会用数据网传输,Wi-Fi类似。
这种方案对于应用来说需要解决的问题:需要给native进程CAP_NET_ADMIN的权限。