iOS开发教程ocket的原理和使用.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS开发教程ocket的原理和使用

iOS开发教程Socket的原理和使用 1. iOS网络编程层次结构 iOS网络编程层次结构分为三层,从上往下依次为: - Cocoa层:NSURL,Bonjour,Game Kit,WebKit - Core Foundation层:基于C 的CFNetwork 和CFNetServices - OS层:基于C 的BSD Socket Cocoa层:是最上层的基于Objective-C 的API,比如URL访问,NSStream,Bonjour,GameKit等,这是大多数情况下我们常用的API。Cocoa 层是基于Core Foundation 实现的。 Core Foundation层:因为直接使用socket 需要更多的编程工作,所以苹果对OS 层的socket 进行简单的封装以简化编程任务。该层提供了CFNetwork 和CFNetServices,其中CFNetwork 又是基于CFStream 和CFSocket。 OS层:最底层的BSD Socket 提供了对网络编程最大程度的控制,但是编程工作也是最多的。因此,苹果建议我们使用Core Foundation 及以上层的API 进行编程。 本文将介绍如何在iOS 系统下使用最底层的Socket 进行编程。 2. 什么是Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。 2.1 TCP和UDP的区别 TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。 UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。 关于TCP是一种流模式的协议,UDP是一种数据包模式的协议,这里要说明一下,TCP是面向连接的,也就是说,在连接持续的过程中,Socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。 而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。 2.2 常用的Socket类型 有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 2.2.1 TCP C/S架构程序设计基本框架 2.2.2 TCP 三次握手 最形象理解: 「你瞅啥?」 「瞅你咋地?」 「来咱俩唠唠。」 然后就唠上了。 2.2.3 TCP 四次挥手 2.2.4基于TCP的套接字代码实现 相关头文件。 #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #include ifaddrs.h 服务端实现代码。 - (void)socketServer { int err; // 1. 创建socket套接字 // 原型:int socket(int domain, int type, int protocol); // domain:协议族type:socket类型protocol:协议 int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); BOOL success = (fd != -1); if (success) { NSLog(@Socket 创建成功); // 地址结构体 struct sockaddr_in addr; // 内存清空 memset(addr, 0, sizeof(addr)); // 内存大小 addr.sin_len=sizeof(addr); // 地址族,在socket编程中只能是AF_INET addr.sin_family=AF_INET; // 端口号 addr.sin_port=htons(1024);

文档评论(0)

kkg445 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档