CFNetwork是核心服务框架中的一个框架,提供了抽象概念的网络协议库。这些抽象概念使得执行各种网络任务变得更容易,例如:
1、使用BSD套接字
2、使用SSL或TLS创建加密连接
3、解析DNS主机
4、使用HTTP,验证HTTP和HTTP服务器
5、使用FTP服务器
6、发布、解析和浏览Bonjour 服务
CFNetwork框架结构
1、CFNetwork概念(CFNetwork Concepts )描述了每个CFNetwork API及它们是如何交互的。
2、使用流(Working with Streams )描述了如何使用CFStream API来发送和接收网络数据。
3、与HTTP服务器通信(Communicating with HTTP Servers )描述了如何发送和接收HTTP消息。
4、与身份验证HTTP服务器通信(Communicating with Authenticating HTTP Servers)描述了如何与安全HTTP服务器通信。
5、使用FTP服务器(Working with FTP Servers)描述了如何从一个FTP服务器上上传和下载文件,以及如何下载目录列表。
6、使用网络诊断(Using Network Diagnostics )描述了如何为应用添加网络诊断。
CFNetwork 概念
CFNetwork是一个低级别高性能的框架,使你能够精细的控制协议栈。它是BSD套接字的扩展,标准套接字抽象API提供对象来简化任务,例如与FTP和HTTP服务器通信或解析DNS主机。CFNetwork物理上和理论上都基于BSD套接字。
CFNetwork相对BSD套接字有很多优点,它提供了run-loop集成,因此,如果你的应用程序是基于运行循环,你可以使用网络协议,而不用实现线程。CFNetwork还包含大量的对象可帮助你使用网络协议,而不用实现具体的细节。例如,你可以使用FTP协议,而不用实现CFFTP API的所有细节。如果你了解网络协议,需要它们提供低级别的控制,但是不想自己实现,这时CFNetwork可能是正确的选择。
使用CFNetwork替代Foundation 级别网络API有很多好处。CFNetwork更侧重于网络协议,而Foundation 级别API侧重于数据访问,例如通过HTTP或FTP传输数据。虽然框架API提供了一些可配置性,但CFNetwork提供了更多。关于框架网络类的更多信息,请参阅URL加载系统编程指南 URL Loading System Programming Guide
CFNetwork依赖的两个API:CFSocket和CFStream是核心基础框架的一部分。
CFSocket API
套接字是网络通信的底层。一个套接字类似于电话插孔。它允许你连接到另一个套接字(通过本地或网络)并发送数据给该套接字。
最常见的套接字是BSD套接字。CFSocket是BSD套接字的一个抽象概念。CFSocket提供几乎BSD套接字的所有功能,使用很少的开销将套接字集成到一个运行循环中。CFSocket并不局限于基于流套接字(例如,TCP),它可以处理任何类型的套接字。
你可以使用CFSocketCreate 函数从头创建一个CFSocket对象,或者使用CFSocketCreateWithNative 函数创建。然后你可以使用函数CFSocketCreateRunLoopSource 创建一个运行循环源,并使用函数CFRunLoopAddSource将其添加到运行循环。这样,当CFSocket对象接收到一条消息时,你的CFSocket回调函数会运行起来。
关于更多CFSocket API的信息,可阅读CFSocket参考CFSocket Reference。
CFStream API
读写流:CFReadStream 和CFWriteStream
流是一个字节序列串行传输的通信路径。流是单向路径,所以需要一个双向通信,一个输入(读取)流和一个输出(写入)流。
CFStream构建在CFSocket之上,在CFHTTP和CFFTP之下。如上图可以看出,尽管CFStream不是CFNetwork正式的部分,但它是几乎所有CFNetwork的基础。
CFStream内置支持安全套接字层(SSL)协议。你可以设置包含流SSL信息的字典,例如属性的安全级别或自签证书。然后传递它给你的流,正如kCFStreamPropertySSLSettings 属性设置流为SSL流。
使用流Working with Streams章节描述了如何使用读写流。
CFHTTP API
发送和接收HTTP消息可使用CFHTTP API。正如CFFTP是FTP协议的抽象,CFHTTP是HTTP协议的抽象。
超文本传输协议(HTTP)是一种客户端和服务器端的请求/响应协议。
使用CFHTTP的更多例子在与HTTP服务通信Communicating with HTTP Servers。
更多详情请参阅CFNetwork Concepts