天天看點

CFNetwork Programming Guide

CFNetwork封裝了具體的網路實作,可以通過CFxxx等api來簡單的實作操作

CFNetwork也是基于core foundation的兩個API,CFSocket和CFStream

[img]http://dl.iteye.com/upload/attachment/0082/4957/86514008-4b29-3c92-8701-f45e4f1da9ae.png[/img]

CFSocket是基于BSD socket的抽象,使用CFSocketCreate、CFSocketCreateWithNative

CFSocketCreateRunLoopSource、CFRunLoopAddSource方法建立CFSocket

CFStream提供兩種抽象的Stream類型,一種是CFReadStream,一種是CFWriteStream.

使用CFStream讀寫流資料跟讀取UNIX檔案類似,首先指定stream的類型(記憶體、檔案、socket等)

然後打開流,進行讀寫操作。避免主線程阻塞,使用異步方法來讀取流。

CFStream支援SSL加密,通過設定kCFStreamPropertySSLSettings屬性來設定。

[img]http://dl.iteye.com/upload/attachment/0082/4957/86514008-4b29-3c92-8701-f45e4f1da9ae.png[/img]

CFNetwork有幾種API組成,每種指定着一種網絡協定。每種協定的API定義都是類似的

CFFTP API:

1:從ftp伺服器中下載下傳檔案

2:上傳檔案到ftp伺服器

3:在ftp伺服器上建立檔案

4:Download a directory listing from an FTP server

CFHTTP API:

CFHTTPAuthentication API支援四種認證方案:

Basic

Digest

NT LAN Manager (NTLM)

Simple and Protected GSS-API Negotiation Mechanism (SPNEGO)

CFHost API處理步驟:

1:建立一個CFHost對象

2:解析CFHost對象

3:擷取位址、host名稱等資訊

4:銷毀CFHost對象

CFNetServices API(使用Bonjour服務需要CFNetServices API)

CFNetDiagnostics API(當網絡有問題的時候,可以通過這個API來快速定位問題)

//流的讀操作

//流的寫操作

在資料轉化的時候,如果是同步的,那麼就有可能會阻塞主線程,有兩種方式可以避免:

1:使用run loop(檢視Threading Programming Guide):注冊run loop的通知方法,然後在對應的事件上發起通知。

2:使用Polling(輪訓)

//一般情況下,不建議使用輪訓來處理讀寫流的操作

http請求

http相應

Authenticating HTTP Servers

如果一個http伺服器傳回401或者407,那麼表示服務端需要認證,請求中需要帶上證書,在API中,證書放在CFHTTPAuthentication對象中。

[img]http://dl.iteye.com/upload/attachment/0082/5181/3338c3ff-5948-3dcd-83e9-1783a9c68b52.png[/img]

[img]http://dl.iteye.com/upload/attachment/0082/5183/31390f20-10d5-3cc9-b829-d72a0ccd4e2a.png[/img]

把證書放在記憶體中

持久化證書存儲

FTP Servers

建立一個遠端目錄

下載下傳目錄清單

使用網絡診斷

繼續閱讀