ios 網絡開發(CFNetwork)


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)。除了基於文件的流,你不能尋找一個流,一旦數據流被提供或者被消耗,就不能從流中重新取出。

 

 

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;

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM