我正在阅读Networking Programming Topics:Using Sockets and Socket Streams,有一个段落告诉我们不要在iOS上使用POSIX,它说:
在iOS中,POSIX网络不被鼓励,因为它不激活蜂窝无线电或按需虚拟专用网。因此,作为一般规则,您应该将网络代码与任何公共数据处理功能分离开来,并使用更高级别的API重写网络代码。
正如文档所述,如果我使用POSIX套接字来完成我的网络工作,那么它就不会激活蜂窝无线电。我曾想过,这是否意味着如果我的设备没有连接到WIFI,我的应用程序将无法访问互联网,但我通过编写下面的代码来否定它。
在这个例子中,我只使用POSIX套接字api并连接到谷歌的DNS服务器,当我的iPhone连接到蜂窝无线电(没有WIFI)时,它就成功了。
int clientSocket = socket(AF_INET, SOCK_STREAM, 0) ;
struct sockaddr_in server_addr ;
bzero(&server_addr, sizeof(server_addr)) ;
server_addr.sin_port = htons(53) ;
server_addr.sin_addr.s_addr = inet_addr("8.8.8.8") ;
server_addr.sin_family = AF_INET ;
int i = connect(clientSocket, (const struct sockaddr *)&server_addr, sizeof(server_addr)) ;
if (i >= 0) {
NSLog(@"connected") ;
}
close(clientSocket) ;现在我的问题是,它的意思是“激活蜂窝无线电”,以及系统什么时候将关闭蜂窝无线电?
提前谢谢。
发布于 2015-01-05 13:35:43
对于C中的TCP网络,苹果似乎建议使用CFStream。见参考文件/doc/uid/CH73 73-SW4。
发布于 2020-11-13 15:59:15
据“爱斯基摩人奎因”(Quinn the Eskimo)称,他是苹果开发者关系部的一名员工。
从历史上看,BSD套接字无法激活WWAN是一个主要问题,这就是为什么文档中到处都是对WWAN的引用。然而,在现代系统中,WWAN网络几乎被各种系统服务所束缚(最显著的是推送通知)。
他说,使用CFSocketStream或其他非POSIX API还有其他原因:
getaddrinfo),然后连接到每个返回的地址,直到找到一个工作的地址。getaddrinfo。其中只有最后一个是特定于苹果的;一切都是你使用古老的所付出的代价。
https://stackoverflow.com/questions/25032809
复制相似问题