我想使用一个在3G上运行良好但不在某些公司防火墙上运行良好的消息传递协议。当我的应用程序无法通过WiFi连接时,即使在wifi网络可连接时,该应用程序如何强制使用蜂窝网络?
编辑:通过读取可达性类的实现后,我仍然不确定两者是否确实是相互排斥的。很可能可以通过gethostbyname()
发现两个接口,我可能会尝试查看出来的内容。
使用getifaddrs列举网络接口。寻找以" PDP"开头的IFA_NAME。这将是蜂窝接口(例如PDP_IP0)。测试(ifa_flags& iff_up)以确保接口已启动,并从IFA_ADDR获取IP地址。然后使用bind()将套接字绑定到该地址。
如果尚未启动,则不确定如何激活蜂窝接口。通常,我只是进行高级HTTP调用以使iOS唤醒网络,但不确定在哪个条件下,当WiFi也可用时,蜂窝服务会变得有效。我怀疑通常是WiFi的后备。
http://iphonedevsdk.com/discussion/comment/120957
从该线程的外观看来,这似乎是不可能的。最好的选择可能是尝试使用协议,并说"请与wifi断开并重试"之类的话。
这个线程几乎说相同的话:
如何在iPhone上编程启动3G连接?
您可以使用Apple编写的可及性类,以测试网络连接当前是否超过3G或WIFI,甚至可以检查网络上是否有特定资源。
您可以使用任何套接字库强迫使用蜂窝。从getifaddrs找到蜂窝界面,将接口传递到插座函数,插座绑定将在细胞中发生。例如cocoaasyncsocket