- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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);
您可能关注的文档
- gre 填空 汇电子版.doc
- GRE-献给不新东方的G友:我的阅读笔记(王鹏主讲).doc
- GRE20066月填空、词汇真题解析.doc
- GREE智能取开关产品详细说明.doc
- GRE句子填空13+1”解题技巧.doc
- GRE巅峰词汇全)-打印版.docx
- GRE分类词汇005版新.doc
- GREE智能取开关产品详细说明书.doc
- GRE作文ARUMENT提纲英文版by_featherstand.doc
- GRE科技类阅常见词汇大集合.docx
- 2025AACR十大热门靶点推荐和解读报告52页.docx
- 财务部管理报表.xlsx
- 高中物理新人教版选修3-1课件第二章恒定电流第7节闭合电路欧姆定律.ppt
- 第三单元知识梳理(课件)-三年级语文下册单元复习(部编版).pptx
- 俄罗斯知识点训练课件-七年级地理下学期人教版(2024).pptx
- 课外古诗词诵读龟虽寿-八年级语文上学期课内课件(统编版).pptx
- 高三语文二轮复习课件第七部分实用类文本阅读7.2.1.ppt
- 高考物理人教版一轮复习课件第4章第3讲圆周运动.ppt
- 高考英语一轮复习课件53Lifeinthefuture.ppt
- 2025-2030衣柜行业风险投资发展分析及投资融资策略研究报告.docx
文档评论(0)