我打算用C编写一个跨平台库,它需要做一些联网工作。我看到iOS支持套接字,但是站点警告不要使用POSIX套接字:
在iOS中,POSIX网络不被鼓励,因为它不激活蜂窝无线电或按需虚拟专用网。因此,作为一般规则,您应该将网络代码与任何公共数据处理功能分离开来,并使用更高级别的API重写网络代码。
然而,它也表明POSIX套接字是跨平台的一个很好的选择。因为POSIX套接字不会自动激活蜂窝收音机,所以我需要自己去做,对吧?是否有更好的方法来做到这一点,而不是简单地打开一个更高级别的api和关闭连接的手?
发布于 2014-12-09 09:29:03
同样的尝试,尽管文档说较低级别的API不会激活蜂窝无线电和按需VPN,但对于TCP连接来说,这并不是完全正确的。
在UDP的情况下,这是正确的,并且您的UDP数据包大部分时间不会被发送。要解决这个问题,只需打开一个监听套接字TCP使用较低级别的API,这将激活蜂窝无线电或按需VPN,并关闭套接字一旦完成。
对于TCP,您可以在iOS设备上使用服务器端代码的低级APIs,这确实激活蜂窝无线电或按需VPN,但是对于iOS设备上的客户端代码,最好使用已经提供的更高级别的APIs。无论哪种方式,无线电都是活动的,您不必担心数据包没有被发送。
顺便说一句,这就是我目前正在做的事情。
发布于 2015-01-05 13:33:51
对于TCP网络,苹果似乎建议使用CFStream
。见参考文件/doc/uid/CH73 73-SW4。
发布于 2018-06-08 14:54:43
苹果公司发布了一个新的网络框架,允许对使用哪台收音机(蜂窝或WiFi)进行细粒度控制。因此,您可能需要创建一个NWConnection,并使用NWParameters的requiredInterface或prohibitedInterfaces属性控制无线电的使用。
https://stackoverflow.com/questions/25045829
复制相似问题