如何强制iOS应用程序使用3G而不是WiFi?

5
我希望使用一种在3G网络下运行良好但在某些公司防火墙下无法使用的消息协议。当我的应用程序无法通过WiFi连接时,如何强制使用蜂窝网络,即使WiFi网络可达?
编辑:阅读完Reachability类的实现后,我仍然不确定这两者是否互斥。可能可以通过gethostbyname()发现两个接口,我可以尝试一下看看结果如何。

你找到答案了吗? - onmyway133
@entropy:恐怕不行。在有机会深入调查之前,我被其他项目分心了。 - Marcelo Cantos
3个回答

6
使用getifaddrs函数来枚举网络接口。查找以“pdp.”开头的ifa_name,这将是蜂窝数据接口(例如,pdp_ip0)。测试(ifa_flags & IFF_UP)以确保该接口已启用,并从ifa_addr中获取IP地址。然后使用bind()将套接字绑定到该地址。
如果不确定如何激活蜂窝数据接口,可以尝试发起一个高级别的http请求,让iOS唤醒网络。但不确定在wifi可用时蜂窝数据服务何时激活。我怀疑它通常是wifi的备选方案。

好的信息。谢谢! - Shiva Reddy

2
你可以使用任意的套接字库来强制使用蜂窝数据。通过 getifaddrs 找到蜂窝网络接口,将该接口传递给 socket 函数,绑定 socket 将会发生在蜂窝网络上。例如:CocoaAsyncSocket

嗨,Kumar,你知道如何绑定接口但使用IPv6吗?因为当我只开启4G时,它显示我的IP是IPv6。但是当我尝试通过套接字连接时,它返回IPv4。 - Nguyen

2

谢谢提供链接。我已经看到过几篇类似的帖子,但是我希望能找到更可靠的资料。请参考我的修改后的问题,其中包含了我对可达性类(Reachability class)的想法。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接