资源描述:
《ios网络编程之socket》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、iOS网络编程之Socket一,iOS网络编程层次模型在前文《深入浅出Cocoa之Bonjour网络编程》中我介绍了如何在Mac系统下进行Bonjour编程,在那篇文章中也介绍过Cocoa中网络编程层次结构分为三层,虽然那篇演示的是Mac系统的例子,其实对iOS系统来说也是一样的。iOS网络编程层次结构也分为三层:·Cocoa层:NSURL,Bonjour,GameKit,WebKit·CoreFoundation层:基于C的 CFNetwork和CFNetServices·OS层:基于C的BSDsocketCocoa层是最上层的
2、基于Objective-C的API,比如URL访问,NSStream,Bonjour,GameKit等,这是大多数情况下我们常用的API。Cocoa层是基于CoreFoundation实现的。CoreFoundation层:因为直接使用socket需要更多的编程工作,所以苹果对OS层的socket进行简单的封装以简化编程任务。该层提供了CFNetwork和CFNetServices,其中CFNetwork又是基于CFStream和CFSocket。OS层:最底层的BSDsocket提供了对网络编程最大程度的控制,但是编程工作也是最
3、多的。因此,苹果建议我们使用CoreFoundation及以上层的API进行编程。本文将介绍如何在iOS系统下使用最底层的socket进行编程,这和在window系统下使用C/C++进行socket编程并无多大区别。本文源码:https://github.com/kesalin/iOSSnippet/tree/master/KSNetworkDemo运行效果如下:otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenew
4、OfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingx
5、iaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersand二,BSDsocketAPI简介BSDsocketAPI和winsockAPI接口大体差不多,下面将列出比较常用的API:API接口讲解intsocket(intaddressFamily,inttype,intprotocol)intclose(intsocketFileDescriptor)socket 创建并初始化socket,返回该socket的文
6、件描述符,如果描述符为-1表示创建失败。通常参数addressFamily是IPv4(AF_INET)或IPv6(AF_INET6)。type表示socket的类型,通常是流stream(SOCK_STREAM)或数据报文datagram(SOCK_DGRAM)。protocol参数通常设置为0,以便让系统自动为选择我们合适的协议,对于otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andDirectorofthenewOfficeinJingde
7、zhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNingxiaCountypartyC
8、ommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersandstreamsocket来说会是TCP协议(IPPROTO_TCP),而对于datagram来说会