CFNetwork 框架
CFNetwork框架
概述
CFNetwork是一個高性能的低級框架,可以控制一些更底層的東西,如各種常用網絡協議、socket通訊等,實際上除了socket是傳輸層之外,本質上還是應用層上的封裝的通用API。使用者可以不用關心底層協議的實際細節。
目前iOS的網絡編程分四層:
- WebKit:屬于Cocoa層,蘋果很多地方用到的頁面渲染引擎;
- NSURL:也屬于Cocoa層,對各類URL請求的封裝;
- CFNetwork:屬于Core Foundation層,基于C的封裝,同樣的還有CFNetServices;
- BSD sockets:屬于OS層,也是基于C的封裝;
框架結構
CFNetwork框架包括的類庫如下:
可以看到,CFNetwork的基礎是CFSocket和CFStream。
CFSocket API
Socket是網絡通訊的底層基礎,可以讓兩個socket端口互發數據。最常用的socket抽象是BSD socket了。而CFSocket則是BSD socket的抽象,基本上實現了幾乎所有BSD socket的功能,并且還融入了run loop。
CFStream API
CFStream API提供了與設備無關的讀寫數據的方法。使用它可以為內存、文件、網絡(使用socket)的數據建立stream,能使用stream而不必馬上把所有數據都寫入到內存中。
CFStream提供API對兩種CFType對象提供抽象:CFReadStream and CFWriteStream。它同時也是CFHTTP和CFFTP的基礎。
CFFTP API
對用FTP協議通信的封裝,能下載、上傳文件和目錄到FTP服務器。CFFTP建立的連接可以是同步或者異步。
CFHTTP API
是HTTP協議的抽象,用CFHTTP API來創建一個HTTP請求,需要指定以下信息:
- 請求方法,如OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、和CONNECT;
- 請求的URL地址;
- HTTP版本, 如version 1.0或1.1;
- 消息頭部,如User-Agent等;
- 消息的主體;
一個例子(來源于官方文檔):
// 請求主體內容
CFStringRef bodyString = CFSTR(""); // Usually used for POST data
CFDataRef bodyData = CFStringCreateExternalRepresentation(kCFAllocatorDefault,
bodyString, kCFStringEncodingUTF8, 0);
// http頭內容
CFStringRef headerFieldName = CFSTR("X-My-Favorite-Field");
CFStringRef headerFieldValue = CFSTR("Dreams");
本文由用戶 ci4753 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!