2012-10-17 74 views
3

我想使用可以在3G上正常工作但不通過某些公司防火牆的消息傳遞協議。即使在WiFi網絡可達的情況下,如果無法通過WiFi連接,我的應用程序如何強制使用蜂窩網絡?如何強制iOS應用程序使用3G而不是WiFi?

編輯:在閱讀實現可達性類後,我仍然不確定這兩者是否確實互斥。通過gethostbyname()可以發現兩個接口,我可能會試着看看會發生什麼。

+0

您是否找到答案? – onmyway133

+0

@entropy:恐怕不是。在得到更深入調查的機會之前,我對其他項目有偏見。 –

回答

2

http://iphonedevsdk.com/discussion/comment/120957

從該線程的樣子,好像它是不可能的。您最好的選擇可能是嘗試使用協議,並說「如果無法正常工作,請從WiFi斷開並重試」。

此線程說,幾乎同樣的事情:

how to programatically start 3g connection on iphone?

可以使用Reachability類蘋果爲了寫測試網絡連接是否是當前通過3G或WiFi,甚至檢查如果網絡上有特定資源可用。

+0

感謝您的鏈接。我遇到過幾個這樣的貼子,但我希望有更明確的東西。查看我的修改後的問題,瞭解我對可達性課程的看法。 –

4

使用getifaddrs枚舉網絡接口。尋找以「pdp」開頭的ifa_name。這將是蜂窩接口(例如,pdp_ip0)。測試(ifa_flags & IFF_UP)以確保接口已啓動,並從ifa_addr獲取IP地址。然後使用bind()將套接字綁定到該地址。

不知道如何激活蜂窩接口,如果它尚未啓動。通常情況下,我只是通過高級http呼叫讓iOS喚醒網絡,但無法確定當wifi也可用時,蜂窩服務在什麼情況下變爲活動狀態。我懷疑它通常是作爲無線網絡的後備。

+0

好信息。謝謝! –

相關問題