如何在iOS中激活蜂窝无线电,因为bsd套接字不会自动激活它



我打算用C写一个跨平台库,这需要做一些网络。我看到iOS支持套接字,但苹果开发者网站警告不要使用POSIX套接字:

在iOS中,不鼓励POSIX网络,因为它不会激活蜂窝无线电或按需VPN。因此,作为一般规则,您应该将网络代码与任何公共数据处理功能分开,并使用更高级的api重写网络代码。

然而,它也表明POSIX套接字是跨平台的一个很好的选择。由于POSIX套接字不会自动激活蜂窝无线电,我需要自己做对吗?是否有比简单地使用高级api打开连接并事先关闭连接更好的方法来做到这一点?

也在尝试同样的事情,尽管文档说较低级别的api不会激活蜂窝无线电和按需VPN,但事实证明TCP连接并不完全正确。

在UDP的情况下,这是正确的,并且您的UDP数据包大多数时候不会发送。要解决这个问题,只需使用低级api为TCP打开一个侦听套接字,这将激活蜂窝无线电或按需VPN,并在完成后关闭套接字。

对于TCP,你可以为iOS设备上的服务器端代码使用低级api,这确实会激活蜂窝无线电或按需VPN,但对于iOS设备上的客户端代码,最好使用已经提供的高级api。无论哪种方式,无线电都是活跃的,你不必担心数据包没有被发送。

顺便说一下,这就是我目前正在做的。

对于TCP网络,Apple似乎建议使用CFStream。见https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/CommonPitfalls/CommonPitfalls.html #//apple_ref/doc/uid/CH73-SW4。

苹果发布了一个新的网络框架,可以对使用哪种无线电(蜂窝或WiFi)进行细粒度控制。因此,您可能需要创建一个NWConnection,并使用NWParameters

的requiredInterface或prohibitedInterfaces属性来控制无线电使用。

最新更新