ios 网络开发(CFNetwork)

摘要:
Foundation更倾向于API数据请求。它允许连接到另一个电话插孔,并将一些信息传输到过去。提供交换媒体数据的简单方法。您可以为内存、文件或网络中的数据创建流,并且可以在不将数据加载到内存的情况下使用流。流是字节序列串行传输的通信路径。它从FTP服务器下载文件,将文件上载到FTP服务器,获取FTP服务器下的目录,创建目录,并向FTP服务器CFHTTP发送和接收HTTP消息。
CFNetwork

存在于CoreFoundation中的一个低级别但高性能的网络框架。BSD套接字的扩展,CFNetwork物理上和理论上都基于BSD套接字。有大量的Cocoa框架依赖于CFNetwork

CFNetwork更侧重与网络协议,Foundation则更倾向于API数据请求等,虽然框架也提供了一些操作,但是远不如CFNetwork丰富。在学习CFNetwork之前,需要先了解2个基础API框架: CFSocketCFStream

CFSocket API

套接字是网络通信的底层,一个套接字类似于电话的插孔,他允许链接到另外一个电话插孔并传输一些信息过去。最常见的套接字是BSD套接字。CFSocket是BSD套接字的一个抽象概念,在很小开销的情况下,几乎提供了全部BSD套接字的功能,并将套接字集成到一个Loop中。并且,CFSocket可以处理任何类型的套接字。

CFStream API

读写流,提供一种简单的方法进行媒体数据的交换,与设备无关。你可以为内存中、文件中或者网络中的数据创建流,并且你可以在不把数据加载到内存中的情况下使用流。流是一个字节序列串行传输的通信路径,流是单向的,通常情况下,为了双向通信,需要输入(CFReadStream)、输出流(CFWriteStream)。除了基于文件的流,你不能寻找一个流,一旦数据流被提供或者被消耗,就不能从流中重新取出。

ios 网络开发(CFNetwork)第1张

CFFTP

CFFTP使与FTP服务器通信更加便利。创建写入流与读取流,使用读写流,你可以进行的操作包括:

  • 从FTP服务器下载文件
  • 上传文件到FTP服务器
  • 获得FTP服务器下目录
  • 创建目录到FTP服务器
CFHTTP

发送和接受HTTP消息,CFFTP是FTP协议的抽象,CFHTTP是HTTP协议的抽象。超文本传输协议(HTTP)是一种客户端/服务端的请求/响应协议,客户端创建请求消息,请求消息被序列化,转换为原始字节流,发送字节流到服务器,服务器收到进行反序列化处理并响应。

要创建一个HTTP请求,需指定一些基础的内容:
  • 请求的方法,比如GET、POST、HEAD等
  • URL 资源定位,比如http://www.apple.com
  • HTTP版本,比如1.0、2.0
  • 消息主题,字节流
  • 消息头
CFHTTPAuthentication

完成身份验证。

CFHost

获取主机信息,包括名称、地址、可达性信息等。获取信息的过程被称为解析

所有的CFNetwork、CFHost都兼容IPv4与IPv6,使用CFHost,可以透明的使用代码对IPv4、IPv6进行处理。

CFNetServices

如果你想让你的应用使用Bonjour注册一个服务或发现服务可以使用CFNetServices。Bonjour是苹果零配置网络(ZEROCONF)的实现,它允许你发布、发现和解析网络服务。

CFNetDiagnostics

连接到网络的应用依赖于一个稳定的链接。如果网络不稳定,这将导致应用程序的问题。采用CFNetDiagnostics API,用户可以自己诊断如下网络问题:

  • 物理连接失败(例如,未插入电缆)
  • 网络故障(例如,DNS或DHCP服务器不再响应)
  • 配置失败(例如,代理配置不正确)
CFStringRef bodyString = CFSTR("Hello");
    
    CFStringRef headerFieldName = CFSTR("X-My-Favorite-Field");
    CFStringRef headerFieldValue = CFSTR("Dreams");
    
    CFStringRef url = CFSTR("http://www.apple.com");
    CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
    
    CFStringRef requestMethod = CFSTR("GET");
    CFHTTPMessageRef myRequest =
    CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL,
                               kCFHTTPVersion1_1);
    
    CFDataRef bodyDataExt = CFStringCreateExternalRepresentation(kCFAllocatorDefault, bodyString, kCFStringEncodingUTF8, 0);
    CFHTTPMessageSetBody(myRequest, bodyDataExt);
    CFHTTPMessageSetHeaderFieldValue(myRequest, headerFieldName, headerFieldValue);
    CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest);
    
    CFRelease(myRequest);
    CFRelease(myURL);
    CFRelease(url);
    CFRelease(mySerializedRequest);
    myRequest = NULL;
    mySerializedRequest = NULL;

免责声明:文章转载自《ios 网络开发(CFNetwork)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jenkins+maven+svn实现springboot项目的自动化部署过程03- nginx反向代理解决前端跨域下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网络知识收集

最近学习Ravello虚拟化,遇到一些和网络相关的知识,收集后整理如下: L2其实是指七层网络协议中的第二层数据链路层,它的传输是以mac地址为基础L3指网络层:是以ip地址为基础网络层属于OSI中的较高层次了,从它的名字可以看出,它解决的是网络与网络之间,即网际的通信问题,而不是同一网段内部的事。网络层的主要功能即是提供路由,即选择到达目标主机的最佳...

基于ABP的应用执行Update-Database出现异常的解决办法

今天在QQ群中看到有网友在更新数据库执行Update-Database时出现下面的错误: 为了能让搜索引擎搜索到,特意加上该错误的文字说明: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Networ...

Protobuf3 语法指南

  目录 [−] 定义一个消息类型 指定字段类型 分配标识号 指定字段规则 添加更多消息类型 添加注释 保留标识符(Reserved) 从.proto文件生成了什么? 标量数值类型 默认值 枚举 使用其他消息类型 导入定义 使用proto2消息类型 嵌套类型 更新一个消息类型 Any Oneof 使用Oneof Oneof 特性 向后兼...

JIRA运行太慢,修改JVM

一、windows服务器部署 JIRA运行太慢,根据实际实况,修改JVM内存大小 2. 非NT服务修改JVM内存大小 修改%JIRA_HOME%/bin下面的setenv.bat文件,修改JAVA_OPTS这个环境变量 set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m -Datlassian.standalone=JI...

消息队列最大数目

消息队列: 1.每次msgrcv一个消息,1.那个消息会在内核中移除 2.每次msgrcv都只会给一个消息出来,不管你rcv用多大的buf来接收,都是可以的。如果msgrcv的bufSize小于实际的该消息的大小,那么可以设置一个标志:表示截断。 如果不设置,那么会报错。取不出来。 2.消息满了,则默认0为阻塞,直到有了空间位置,才能snd消息进入到内核。...

RocketMQ 消费者核心配置和核心知识

一、RocketMQ4.X 消费者核心配置 consumeFromWhere 配置(某些情况失效:参考https://blog.csdn.net/a417930422/article/details/83585397)这个配置基本不用改,采用默认配置即可。 CONSUME_FROM_FIRST_OFFSET: 初次从消息队列头部开始消费,即历史消息(还储...