我想使用一种在3G上运行良好的消息传递协议,但不能在某些企业防火墙上使用。即使在可以访问WiFi网络的情况下,我的应用程序如何在无法通过WiFi连接时强制使用蜂窝网络?
编辑:在阅读了Reachability类的实现后,我仍然不确定这两者是否确实是互斥的。很可能通过gethostbyname()
发现这两个接口,我可能只是想看看会发生什么。
答案 0 :(得分:6)
使用getifaddrs枚举网络接口。查找以“pdp”开头的ifa_name。这将是蜂窝接口(例如,pdp_ip0)。测试(ifa_flags& IFF_UP)以确保接口已启动,并从ifa_addr获取IP地址。然后使用bind()将套接字绑定到该地址。
如果蜂窝接口尚未启动,则不确定如何激活蜂窝接口。通常,我只是进行高级别的http呼叫以让iOS唤醒网络,但不确定在什么条件下,当wifi也可用时,蜂窝服务变为活动状态。我怀疑它通常是作为无线网络的后备。
答案 1 :(得分:2)
http://iphonedevsdk.com/discussion/comment/120957
从该线程的外观来看,这似乎是不可能的。你最好的选择可能是尝试使用协议,并说“如果它不起作用,请断开与wifi断开连接”。
这个帖子几乎说了同样的事情:
how to programatically start 3g connection on iphone?
您可以使用Apple编写的Reachability类来测试网络连接当前是通过3G还是WiFi,甚至检查网络上是否有特定资源。
答案 2 :(得分:1)
您可以使用任何套接字库强制使用手机。从getifaddrs找到蜂窝接口,将接口传递给套接字函数,套接字绑定将发生在蜂窝网络中。例如CocoaAsyncSocket