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
建立一個遠端目錄
下載下傳目錄清單
使用網絡診斷