iOS CFNetwork Concepts CFNetwork概念 官方文档翻译(三)

原文地址:developer

CFNetwork概念

CFNetwork是一个低级的、高性能的框架,使您能够详细的控制协议栈。BSD套接字是一个扩展,提供对象的标准套接字抽象API来简化任务,比如与FTP和HTTP服务器或沟通解决DNS主机。CFNetwork为基础,从主体上和理论上,BSD套接字。

正如CFNetwork依赖于BSD套接字,有大量的Cocoa类依赖CFNetwork(例如,NSURL)。此外,Web工具包是一组Cocoa类在窗口中显示网页内容。这两个类是非常高的水平,实现大部分的网络协议的细节。因此,软件层的结构看起来像图像如图1 - 1所示。

图1 - 1在OS X CFNetwork和其他软件层

何时使用CFNetwork

CFNetwork在BSD套接字有许多优点。它提供run-loop集成,因此,如果您的应用程序是基于运行循环可以使用网络协议没有实现线程。CFNetwork还包含大量的对象来帮助你使用网络协议,而无需自己实现细节。例如,您可以使用FTP协议无需CFFTP API实现的所有细节。如果你理解网络协议,需要他们提供的低级控制但不想实现自己,然后CFNetwork可能是正确的选择。

有许多优势,使用CFNetwork代替基础水平网络api。CFNetwork更侧重于网络协议,而基础水平更侧重于数据访问api,比如通过HTTP或FTP传输数据。虽然基础api提供了一些可配置性,CFNetwork提供更多。基础网络课程的更多信息,阅读URL Loading System Programming 指南.

现在开始了解CFNetwork交互与其他OS X网络api,准备熟悉CFNetwork api以及两个api,形成CFNetwork的基础设施。

CFNetwork基础设施

在学习CFNetwork api之前,你必须首先理解的api大多数CFNetwork的基础。CFNetwork依赖两个api的核心基础框架的一部分,CFSocket CFStream。理解这些api使用CFNetwork至关重要。

CFSocket API

套接字是最基本的网络通信。一个套接字以类似电话的方式。它允许您连接到另一个套接字(本地或通过网络)和套接字发送数据。

最常见的套接字抽象是BSD套接字。CFSocket是一个抽象的BSD套接字。非常小的开销,CFSocket BSD套接字提供了几乎所有的功能,并集成了套接字变成一个循环运行。CFSocket并不局限于基于流套接字(例如TCP),它可以处理任何类型的套接字。

你可以从头创建一个CFSocket对象使用CFSocketCreate函数,或从一个BSD套接字使用CFSocketCreateWithNative函数。然后,您可以使用该函数创建一个run-loop源CFSocketCreateRunLoopSource并将它添加到CFRunLoopAddSource运行循环的功能。这将允许你CFSocket回调函数运行时CFSocket对象接收一条消息。

读CFSocket参考有关CFSocket API的更多信息。

CFStream API

读写流提供一种简单的方法来交换数据和从各种媒体方式与设备无关。您可以创建流数据位于内存中,在一个文件中,或者在一个网络(使用套接字),你可以使用数据流,而不必将所有数据加载到内存中去。

流是一个字节序列传输串行通信路径。流是单向路径,所以双向沟通的一个输入(阅读)流和输出(写)流是必要的。除了基于文件流,你不能寻求在一个流;一旦流数据被提供或消费,又无法获取它的流

CFStream是一个API,它提供了一个抽象为这些流有两个新的CFType对象:CFReadStream CFWriteStream。这两种类型的流API规范遵循所有常见的核心基础。关于核心基础类型的更多信息,阅读Core Foundation Design Concepts。

CFStream是建立在CFSocket,CFHTTP和CFFTP的基础。如图1 - 2中可以看出,尽管CFStream不是正式CFNetwork的一部分,它是几乎所有CFNetwork的基础

Figure 1-2  CFStream API structure

您可以使用读写流一样像你UNIX文件描述符。首先,您通过指定实例化流的流型(内存、文件或套接字)和设置任何选项。接下来,您打开流和读或写任何的次数。而流存在,你可以要求其属性的流信息。流属性是任何关于流的信息,比如它的源或目标,不是实际数据被读取或写入的一部分。当你不再需要流,关闭并处理它。

CFStream读或写的函数流将暂停,或块,当前进程,直到至少有一个数据可以读取或写入的字节。为了避免试图读取或写入一个流流将阻止时,使用异步版本的功能和进度上的流循环运行。你的回调函数被调用时可能没有阻塞读和写。

此外,CFStream内置支持安全套接字层(SSL)协议。您可以设置一个字典包含流的SSL信息,如所需的安全级别或自签名证书。然后将它传递给你的流kCFStreamPropertySSLSettings制造SSL流。

本章使用流描述如何使用读写流。

CFNetwork API概念

要理解CFNetwork框架,您需要熟悉的构建块组成。CFNetwork框架分解成单独的api,每个覆盖特定的网络协议。这些api可用于组合,或分开,这取决于您的应用程序。大多数的编程约定api中是常见的,因此,重要的是理解。

CFFTP API

沟通与CFFTP FTP服务器变得更加容易。使用CFFTP API,您可以创建FTP读流(下载)和FTP写流(上传)。使用FTP读写流可以执行等功能。

从一个FTP服务器下载一个文件

上传文件到FTP服务器上

从一个FTP服务器下载目录清单

在FTP服务器上创建目录

FTP流就像所有其他CFNetwork流。例如,您可以创建一个FTP读取流CFReadStreamCreateWithFTPURL函数通过调用函数。然后,您可以调用该函数CFReadStreamGetError随时检查流的状态。

通过设置FTP流上的属性时,您可以调整您为其特定的应用程序流。例如,如果流的服务器连接到需要用户名和密码,您需要设置适当的属性所以流可以正常工作。关于不同属性的更多信息可看Setting up the Streams.。、

CFFTP流可以使用同步或异步。打开连接的FTP服务器创建时指定FTP读取流,CFReadStreamOpen调用的函数。从流读取,使用CFReadStreamRead函数并提供读取流参考,CFReadStreamRef,返回FTP读取流时创建的。CFReadStreamRead函数填充和FTP服务器的输出缓冲区。

使用CFFTP更多信息,请看 Working with FTP Servers。

CFHTTP API

发送和接收HTTP消息,使用CFHTTP API。正如CFFTP是一个抽象的FTP协议,CFHTTP是HTTP协议的一个抽象。

超文本传输协议(HTTP)请求/响应协议客户端和服务器之间。客户端创建一个请求消息。这个消息被序列化,这一过程将消息转换为原始字节流。消息不能传播,直到他们被序列化。然后请求消息发送到服务器。请求通常要求一个文件,如网页。服务器响应发送回一个字符串消息紧随其后。这个过程重复多次是必要的。

要创建一个HTTP请求消息,您指定以下:

请求方法,可以请求方法定义的超文本传输协议,如GET, HEAD, POST, PUT, DELETE, TRACE,和CONNECT

URL,如http://www.apple.com

他HTTP版本,比如版本1.0或1.1

消息的标题,通过指定的标题名称,如User-Agent,和它的value,如MyUserAgent

消息的主体

消息后,你序列化。请求序列化后,看起来像这样:

GET / HTTP/1.0\r\nUser-Agent: UserAgent\r\nContent-Length: 0\r\n\r\n

反序列化是序列化的反面。反序列化,从客户机或服务器接收到的原始字节流恢复其原生的表示。CFNetwork提供所有功能需要得到消息类型(请求或响应)、HTTP版本,URL,标题,和传输流,序列化消息。

更多的例子在Communicating with HTTP Servers。

CFHTTPAuthentication API

如果你发送一个HTTP请求身份验证服务器没有凭证(或用不正确的凭证),服务器将返回一个授权的要求(俗称401或407响应)。CFHTTPAuthentication API HTTP消息身份验证凭证适用于一些要求。CFHTTPAuthentication支持以下身份验证方案:

Basic

Digest

NT LAN Manager (NTLM)

Simple and Protected GSS-API Negotiation Mechanism (SPNEGO)

新的在OS X v10.4上携带持久性跨域请求的能力。在OS X v10.3每次请求受到要求,你必须从头开始身份验证对话框。现在,你为每个服务器维护一组CFHTTPAuthentication对象。当你收到一个401或407响应,您找到正确的对象和凭证的服务器和应用它们。CFNetwork使用信息存储在对象尽可能高效地处理请求。

通过持续在请求时,这个新版本的CFHTTPAuthentication提供更好的性能。更多的信息关于如何使用CFHTTPAuthentication请看Communicating with Authenticating HTTP Servers。、

CFHost API

你使用CFHost API获取主机信息,包括名字,地址,和可达性信息。获取信息的过程称为resolution。

使用CFHost 就像CFStream一样:

创建一个CFHost对象

开始解决CFHost对象。

检索的地址、主机名、或可达性信息

当你完成的时候摧毁CFHost对象。

像所有CFNetwork CFHost IPv4和IPv6是兼容的。使用CFHost,您可以编写代码来处理IPv4和IPv6。

CFHost集成与CFNetwork的其余部分。例如,有CFStream名为CFStreamCreatePairWithSocketToCFHost的函数将直接从CFHost创建一个CFStream对象。关于CFHost对象功能的更多信息,看CFHost Reference。

CFNetServices API

如果你想让你的应用程序使用Bonjour注册一个服务或发现服务,使用CFNetServices API。Bonjour是苹果的zero配置网络的实现(ZEROCONF),它允许您发布、发现和解决网络服务。

实现你好CFNetServices API定义了三个对象类型:CFNetService CFNetServiceBrowser,CFNetServiceMonitor。CFNetService对象代表一个单一的网络服务,如打印机或文件服务器上。它包含所有所需的信息对于服务器的另一台计算机来解决,如名称、类型、域和端口号。CFNetServiceBrowser对象被用来发现领域内域和网络服务。和CFNetServiceMonitor对象用于监视CFNetService对象的变化,如iChat状态消息。

Bonjour完整的描述,请参阅Bonjour Overview.。关于使用CFNetServices的更多信息和实现Bonjour,请看NSNetServices and CFNetServices Programming Guide.

CFNetDiagnostics API--网络诊断

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

物理连接失败(例如,电缆未插入)

网络故障(例如,DNS、DHCP服务器不再回应)

配置失败(例如,代理配置是不正确的)

一旦网络故障诊断,CFNetDiagnostics指导用户解决问题。你可能看过CFNetDiagnostics行动如果Safari未能连接到一个网站。CFNetDiagnostics助理可以看到如图1 - 3所示。

通过提供CFNetDiagnostics网络故障的上下文中,您可以调用CFNetDiagnosticDiagnoseProblemInteractively函数引导用户通过提示找到解决的办法。此外,您可以使用CFNetDiagnostics查询连接状态和为用户提供统一的错误消息。

看到如何将CFNetDiagnotics集成到您的应用程序请看Using Network Diagnostics。CFNetDiagnostics为OS X v10.4新的API。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-07 07:27:54

iOS CFNetwork Concepts CFNetwork概念 官方文档翻译(三)的相关文章

Orchard官方文档翻译(三) 通过zip文件手动安装Orchard

原文地址:http://docs.orchardproject.net/Documentation/Manually-installing-Orchard-zip-file 最近想要学习了解orchard,但却没有找到相关的中文文档,只有英文文档.于是决定自行翻译,以便日后方便翻阅. 转载请注明原作者与出处. 本人英文水平有限,错误之处欢迎指出以便修正. 手动安装Orchard Zip文件 该主题的内容已在Orchard1.8Release版本下通过测试. 该主题展示了执行通过zip文件Orch

iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译

编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 1 苹果API常用英语名词---iOS-Apple苹果官方文档翻译 http://www.cnblogs.com/ChenYilong/p/3495625.html 2 基本控件文档-UIWebView---iOS-Apple苹果官方文档翻译 http://www.cnblogs.com/ChenYilong/p/3556301.html 3 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译 http:/

CFNetwork概念(CFNetwork Concepts )

CFNetwork是一个低级别高性能的框架,使你能够精细的控制协议栈.它是BSD套接字的扩展,标准套接字抽象API提供对象来简化任务,例如与FTP和HTTP服务器或解析DNS主机.CFNetwork物理上和理论上都基于BSD套接字. 正如CFNetwork依赖与BSD套接字,有大量的Cocoa类依赖CFNetwork(例如,NSURL).此外,Cocoa类的web工具包用来在窗口显示网页内容.这两个类是高层级并实现大部分的网络协议.一次,软件层的结构如图1-1所示. 图1-1 OS X上CFNe

【iOS官方文档翻译】iOS蓝牙的基本概念

之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文章. 1.中心设备和外围设备以及它们在蓝牙通讯中的角色. 在所有的BLE( Bluetooth low energy,下文简称蓝牙4.0 )通讯中都涉及2个主要的角色:中心设备和外围设备.它是基于传统的客户-服务器(主从式)结构,一般来说,外围设备有其它设备需要的数据,中心设备使用外围设备提供的数据

iOS Communicating with Authenticating HTTP Servers 与HTTP服务器通信认证 官方文档翻译(六)

原文地址:developer 召集翻译人手:请加入486111671  ios 官方文档翻译                                                            与HTTP服务器通信认证 本章描述了如何与HTTP服务器身份验证利用CFHTTPAuthentication API.它解释了如何找到匹配验证对象和凭证,将它们应用到一个HTTP请求,并将它们存储供以后使用. 一般来说,如果一个HTTP服务器将返回一个401或407响应后你的HTTP请求

iOS Drawing Concepts[iOS 绘画概念]

iOS Drawing Concepts https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html High-quality graphics are an important part of your app’s user interface. Providin

Alljoyn瘦客户端库介绍(官方文档翻译)

Alljoyn瘦客户端库介绍(1) 1.简介 本文档对AllJoynTM瘦客户端的核心库文件(AJTCL)进行了详尽的介绍.本文档介绍了系统整体架构,AllJoyn框架结构,并着重于介绍如何将嵌入式设备加入AllJoyn系统整体架构中.1.1目的 本文档介绍了如何使一个受限于功耗.计算能力和内存的设备(嵌入式设备)加入AllJoyn分布式系统.具体而言,本文档包括了对AllJoyn面向嵌入式系统的方面的介绍,并着重描述了基于AllJoyn的系统的各个组件是如何与嵌入式设备协作以构建一个基于接近式

Swift语言官方文档翻译(2)

A Swift Tour 按照惯例,我们一般学习一个新语言的时候,我们都习惯性的在屏幕上打印"Hello, World",在Swift中,你可以用如下一个单独语句实现 println("Hello,World") 如果你用C或者OC写过程序,那么上面的语句对于你来说是很熟悉的.在Swift中,这一行代码就是一个完整的程序,你不需要为了类似I/O或者String handling去导入一些jar包.全局变量将作为一个程序的入口点,所以你不需要main函数,你也不需要在

Android Bluetooth Low Energy官方文档翻译

Android Bluetooth Low Energy官方文档翻译 Android4.3(API18)为Bluetooth Low Energy(简称BLE)的核心功能提供了平台支撑,App能够通过它用来发现设备,查询服务,以及读写特性.与传统的蓝牙相比,BLE设计的最大特征就是低功耗.这使得Android的APP能够与具备低功耗的BLE设备进行通信,比如距离传感器,心跳检测,健身设备等等. 关键术语和概念 下面是一些关于BLE的核心术语和概念 Generic Attribute Profil