Network concept
大部分網(wǎng)絡(luò)基于TCP/IP通信協(xié)議。對(duì)TCP/IP網(wǎng)絡(luò)模型基礎(chǔ)有一定的了解职祷。
術(shù)語(yǔ)
包:header琅束,包應(yīng)該發(fā)到哪里
payload,真實(shí)的數(shù)據(jù)
trailer低缩,包含校驗(yàn)和信息嘉冒,確保獲得正確的包。(有些在header里咆繁,可以沒(méi)有這部分)
主機(jī)重組這些包讳推,提供給程序,無(wú)論是字節(jié)流或者一系列的消息(取決于協(xié)議)玩般。程序發(fā)送數(shù)據(jù)響應(yīng)银觅,主機(jī)分包發(fā)送。一個(gè)包包含另一個(gè)包叫做封裝坏为。
Networking Layers
TCP/IP網(wǎng)絡(luò)模型包含四個(gè)基礎(chǔ)層:連接層究驴,IP層,傳輸層匀伏,應(yīng)用層洒忧。
The Link Layer(連接/物理層)
網(wǎng)絡(luò)棧的這一層包含真實(shí)硬件用于與鄰近的物理主機(jī)通信。這層在相同的物理網(wǎng)絡(luò)上够颠,從一個(gè)主機(jī)到另一個(gè)主機(jī)傳輸原始包熙侍。
一般遇到僅僅5種連接層:WIFI,蜂窩網(wǎng)絡(luò)履磨,Ethernet蛉抓,藍(lán)牙,F(xiàn)ireWire剃诅。
網(wǎng)絡(luò)接口是硬件的一小部分巷送,提供連接層互聯(lián)。一個(gè)主機(jī)可以有很多網(wǎng)絡(luò)接口矛辕。
所有的網(wǎng)絡(luò)一般連接一個(gè)或更多額外的接口笑跛。
The IP Layer
提供從一個(gè)主機(jī)到另一個(gè)的包傳輸,包能夠穿梭在多樣的物理網(wǎng)絡(luò)如筛。
增加了路由的概念堡牡,可以發(fā)送遠(yuǎn)距離目的地。包發(fā)送到鄰近的路由杨刨,路由到路由晤柄,一直到目的地。一次路由轉(zhuǎn)換叫做“跳”妖胀。
MTU
分割問(wèn)題多芥颈,重復(fù)分割帶來(lái)繁重的開(kāi)銷(xiāo)惠勒,一個(gè)包丟失全部失效。現(xiàn)代技術(shù)通過(guò)path MTU discovery決定從一個(gè)主機(jī)到另一個(gè)的最大包爬坑,從而不用分割纠屋。
Transport Layer
寫(xiě)網(wǎng)絡(luò)代碼,要與這層或更高層打交道盾计。
TCP/UDP—基礎(chǔ)數(shù)據(jù)傳輸售担。增加了端口號(hào)的概念。
UDP不保證數(shù)據(jù)永遠(yuǎn)到達(dá)目的地署辉。低延遲族铆。不確認(rèn)之前發(fā)送的包,會(huì)造成驗(yàn)證網(wǎng)絡(luò)堵塞哭尝。在一段時(shí)間與終端失去通信哥攘,確保能停止發(fā)包。如果傳輸高帶寬數(shù)據(jù)材鹦,確保設(shè)計(jì)協(xié)議以便終端確定他們失敗接收的包數(shù)逝淹。當(dāng)堵塞發(fā)生,確保兩點(diǎn)自動(dòng)縮小他們的傳輸率桶唐。最好實(shí)現(xiàn)path MTU discovery栅葡。
TCP:
傳輸保證 -- 用TCP傳輸數(shù)據(jù)保證按順序被獲得。數(shù)據(jù)傳輸失敗尤泽,在timeout后斷開(kāi)妥畏。
擁塞控制 -- 如果由于過(guò)度利用連接造成數(shù)據(jù)丟失,發(fā)送主機(jī)會(huì)降低傳輸速度安吁。
流控制 ? ?-- ? 忙碌,告訴發(fā)送方等待燃辖。
基于流的數(shù)據(jù)控制 -- 軟件看一系列的字節(jié)而不是一系列具體記錄鬼店。想要發(fā)送具體數(shù)據(jù),必須編碼記錄黔龟。
path MTU discovery -- TCP選擇最大包大小妇智,避免分割
UDP:
在IPv4廣播消息—包發(fā)送到廣播地址被在廣播域中的所有主機(jī)接收。
多播消息—包發(fā)送到多播地址氏身,被任何訂閱它的主機(jī)接收巍棱。實(shí)踐中一般限制在LAN
保存記錄邊界—接收者視所有獨(dú)立的消息。而不是連續(xù)的流字節(jié)蛋欣。
ICMP
用于報(bào)告連接失敗航徙。
The Application Layer
HTTP/TCP
這層程序直接控制
Understanding Latency
Addressing Schemes and Domain Names
Link-Layer Addressing ?-- ?MAC
IP-Layer Addressing
IPv4 or IPv6
127.0.0.1
Domain Name System (DNS)
Domain names:
當(dāng)IP地址改變,最小化服務(wù)中斷陷虎。
通過(guò)超過(guò)一個(gè)地址訪問(wèn)主機(jī)
允許多物理主機(jī)偽裝成一個(gè)
在潛在技術(shù)能夠適應(yīng)改變
Packet Routing and Delivery
Link-layer addressing
邏輯地址到物理地址的轉(zhuǎn)換到踏。
執(zhí)行這種會(huì)話的機(jī)制取決于什么種類(lèi)的網(wǎng)絡(luò):
1. On Ethernet-like networks杠袱,OS能從IPv4地址包含硬件地址,通過(guò)運(yùn)用address resolution protocol (ARP)窝稿。一個(gè)ARP請(qǐng)求包含一個(gè)廣播消息楣富,在網(wǎng)絡(luò)中詢問(wèn)有特定IP地址的主機(jī)。之后主機(jī)用自己的link-layer地址作為響應(yīng)伴榔。
IPv6通信纹蝴,主機(jī)用相似協(xié)議:neighbor discovery protocol (NDP),這種協(xié)議基于ICMP踪少。
2. Non-Ethernet-like networks塘安,用多種網(wǎng)絡(luò)協(xié)議,但是一般行為相似秉馏。網(wǎng)絡(luò)驅(qū)動(dòng)提供從IP地址到一些特定硬件值的映射耙旦,這些值用于唯一標(biāo)識(shí)包的目的地。
3. Point-to-point networks萝究,不需要執(zhí)行映射免都,因?yàn)樵谶B接結(jié)束,每個(gè)包都被發(fā)送到主機(jī)帆竹。
4. On cellular networks,手機(jī)通過(guò)信號(hào)塔初始化通信绕娘,塔分配手機(jī)特定的頻率,時(shí)間槽栽连。有點(diǎn)像點(diǎn)對(duì)點(diǎn)险领。
ARP協(xié)議搞不定兩主機(jī)長(zhǎng)距離通信。限制在本地區(qū)域物理網(wǎng)絡(luò)秒紧。Internet用路由來(lái)進(jìn)行長(zhǎng)距離通信绢陌。路由器知道如何發(fā)送數(shù)據(jù)從一個(gè)范圍的IP到另一個(gè)范圍。
邊緣路由器—個(gè)人用戶的小型路由熔恢,只知道IP范圍脐湾。
Core routers —提供主干網(wǎng)的路由,多物理連接叙淌,保存大量路由表(給定IP范圍指明跳的方向)秤掌。用border gateway protocol (BGP),the routing information protocol (RIP)鹰霍。
IPv4 Routing
網(wǎng)絡(luò)地址+主機(jī)地址
主機(jī)必須知道三:自己IP地址闻鉴,目標(biāo)主機(jī)IP,是否目標(biāo)主機(jī)與自身其中一個(gè)地址在同一網(wǎng)絡(luò)茂洒,在就直接發(fā)送孟岛,不在路由。
廣播地址
網(wǎng)絡(luò)地址
路由地址
IPv6 Routing
Firewalls and Network Address Translation
Dynamic Address Assignment
Dynamic Host Configuration Protocol (DHCP) and DHCPv6
客戶端廣播一個(gè)請(qǐng)求給IPv4地址,服務(wù)器分配一個(gè)蚀苛,客戶端維持一個(gè)租約在验,使得IP地址持續(xù)特定的一段時(shí)間《挛矗客戶端更新租約直到過(guò)期腋舌,服務(wù)器沒(méi)有義務(wù)支持續(xù)約,但大部分服務(wù)器可以渗蟹。
Neighbor Discovery and IPv6 Address Assignment
Link-Local Addressing and Bonjour
bonjour一種0配置的網(wǎng)絡(luò)實(shí)現(xiàn)块饺,包含三個(gè)部分:
(1)在IPv4的link-local地址,一種自我分配IP地址的方式雌芽,在沒(méi)有DHCP服務(wù)或者其他IP地址分配方法的時(shí)候授艰。(IPv6內(nèi)置)
(2)組播DNS,當(dāng)一個(gè)基礎(chǔ)架構(gòu)服務(wù)不被展示或者當(dāng)本地不托管命名更加方便世落,提供DNS解決方案
(3)DNS服務(wù)發(fā)現(xiàn)淮腾,一種注冊(cè)和發(fā)現(xiàn)服務(wù)。
Network OverView
1. 只傳輸需要完成任務(wù)足夠的數(shù)據(jù)
2. 無(wú)論什么時(shí)候盡可能避免超時(shí)
3. 設(shè)計(jì)用戶接口屉佳,允許用戶輕易的取消那些太久完成的任務(wù)
3. 優(yōu)雅的處理失敗
4. 當(dāng)網(wǎng)絡(luò)表現(xiàn)不好時(shí)谷朝,優(yōu)雅的降級(jí)
5. 選擇任務(wù)合適的APIs
6. 小心設(shè)計(jì)軟件,以最小化安全風(fēng)險(xiǎn)
Designing for Real-World Networks
一些網(wǎng)絡(luò)設(shè)計(jì)原則
1. Using Power And Bandwidth Efficiently
<1> Batch Your Transfers, and Idle Whenever Possible
<2> Download the Smallest Resource Possible, and Cache Resources Locally
NSURLCache
2. Handling Network Problems Gracefully
<1> Design for Variable Network Interface Availability
Reachability
SCNetworkReachability Reference
<2> Design for Variable Network Speed
<3> Design for High Latency
<4> Test Under Various Conditions
Network Link Conditioner
Assessing Your Networking Needs
OS X & iOS提供三種主要用戶空間的網(wǎng)絡(luò)API武花,F(xiàn)oundation & CFNetwork & POSIX
Common Networking Tasks
(1)Connect to a web server.
Making HTTP and HTTPS Requests
Displaying Web and Multimedia Content
(2)Use sockets or socket streams.
Using Sockets and Socket Streams
(3)Communicate securely
Transport Layer Security (TLS) protocol圆凰,Secure Sockets Layer (SSL)
Next Steps
Keep in mind
Discovering and Advertising Network Services
四個(gè)APIs做這些:
NSNetService,高層OC API適用大多數(shù)開(kāi)發(fā)者
CFNetService体箕,高層C API適用在CF代碼
DNS Service Discovery专钉,底層C API適用跨平臺(tái)代碼,比高層提供更多的靈活
GAME
more, Multipeer Connectivity Framework與你app的實(shí)例通信累铅,關(guān)聯(lián)鄰近設(shè)備跃须。
Bonjour Service Overview
包含三個(gè)部分:
服務(wù)名:唯一
服務(wù)類(lèi)型:對(duì)程序所有實(shí)例相同,應(yīng)該被注冊(cè)IANA
域:
(1)Publishing a Network Service
三種方式:
OC & CF代碼娃兽,推薦CFNetServices API
便攜C代碼回怜,除了OSX iOS,推薦DNS Service Discovery C API
發(fā)布步驟:
<1> 創(chuàng)建一個(gè)socket來(lái)監(jiān)聽(tīng)對(duì)服務(wù)的連接换薄,基于TCP的服務(wù)Networking Programming Topics
<2> 創(chuàng)建服務(wù)對(duì)象,提供socket的端口翔试,domain轻要,服務(wù)類(lèi)型
F,NSNetService +initWithDomain:type:name:port:
CF垦缅,CFNetServiceRef + CFNetServiceCreate
DSD冲泥,調(diào)用DNSServiceRegister返回DNSServiceRef對(duì)象
<3> 分配代理和回調(diào)
F,NSNetService代理
CF,分配一個(gè)客戶端回調(diào)給CFNetServiceRef
DSD凡恍,
<4> 如果有必要志秃,安排,重新安排服務(wù)
F嚼酝,在當(dāng)前run loop浮还,默認(rèn)mode,服務(wù)自動(dòng)被安排闽巩。如果需要在另一個(gè)runloop钧舌,不同mode,需要解除涎跨,重新安排
CF洼冻,必須安排CFNetServicesRef在一個(gè)run loop。
DSD隅很,調(diào)用DNSServiceSetDispatchQueue安排服務(wù)在一個(gè)dispatch queue上撞牢。
<5> 發(fā)布
F,調(diào)用publish
CF叔营,調(diào)用CFNetServiceRegisterWithOptions
DSD屋彪,已經(jīng)發(fā)布。
當(dāng)服務(wù)發(fā)布之后审编,當(dāng)連接建立撼班,你能在scoket上監(jiān)聽(tīng)連接,設(shè)置輸入輸出流垒酬。
(2)Browsing for and Connecting to a Network Service
發(fā)現(xiàn)和解決網(wǎng)絡(luò)服務(wù)的過(guò)程和發(fā)布過(guò)程一樣簡(jiǎn)單砰嘁。為了瀏覽網(wǎng)絡(luò)服務(wù),OC勘究,創(chuàng)建NSNetServiceBrowser矮湘,分配一個(gè)delegate。然后口糕,調(diào)用searchForServicesOfType:inDomain:方法缅阳,一旦任何服務(wù)被發(fā)現(xiàn),代理方法netServiceBrowser:didFindService:moreComing:被調(diào)用景描。
為了連接服務(wù)十办,首先停止瀏覽用stop,然后調(diào)用getInputStream:outputStream:超棺,
CFNetServiceRef + CFStreamCreatePairWithSocketToNetService連接bonjour服務(wù)
NSNetService and Automatic Reference Counting (ARC)
(3)Resolving a Network Service
為了解決向族,首先stop瀏覽,然后調(diào)用resolveWithTimeout: + NSNetService棠绘。
當(dāng)服務(wù)地址已經(jīng)解決件相,服務(wù)的代理方法netServiceDidResolveAddress:被調(diào)用再扭。你能之后訪問(wèn)服務(wù)器主機(jī)名,或者地址信息夜矗。
Multipeer Connectivity Overview
與鄰近設(shè)備的app通信泛范。
To Learn More
Multipeer Connectivity --?Multipeer Connectivity Framework Reference?and the?MultipeerGroupChat?sample code project.
NSNetService --?NSNetServices and CFNetServices Programming Guide,NSNetServiceBrowser Class Reference,NSNetServiceBrowserDelegate Protocol Reference, NSNetServiceDelegate Protocol Reference.
CFNetService -- ReadNSNetServices and CFNetServices Programming Guide,CFNetServices Reference.
DNS Service Discovery -- ReadDNS Service Discovery Programming Guide紊撕,DNS Service Discovery C Reference.
Displaying Web and Multimedia Content
Opening Web Content or Streaming Media in the Default Application
為了在用戶默認(rèn)的瀏覽器或播放器中打開(kāi)網(wǎng)頁(yè)和流URL罢荡。
iOS,用UIApplication的openURL:方法逛揩。
Launching the App Store from an iOS application
Displaying Web Content in Your Application
用WebKit引擎能很容易的加載和展示網(wǎng)頁(yè)柠傍,通過(guò)與Safari相同的渲染引擎
iOS,UIWebView的loadRequest:方法辩稽,初始化initWithFrame:
UIWebView Class Reference
Displaying Streaming Multimedia Content in Your Application
流媒體
iOS惧笛,Media Player Framework基礎(chǔ)播放,AV Foundation framework更多復(fù)雜的功能逞泄。
Multimedia Programming Guide &&AVFoundation Programming Guide.
Making HTTP and HTTPS Requests
當(dāng)選擇API患整,應(yīng)該首先考慮為什么要做HTTP請(qǐng)求:
如果寫(xiě)一個(gè)雜志的app,應(yīng)該用NKAssetDownload API在后臺(tái)下載文本
一般用NSURLSession & NSURLConnection APIs
Making Requests Using Foundation — NSURLSession & NSURLConnection
(1)Retrieving the Contents of a URL without Delegates
只需要通過(guò)URL獲取文本喷众,用結(jié)果做一些事情各谚。—各種熟悉的方法
(2)Retrieving the Contents of a URL with Delegates — delegate
大多數(shù)情況到千,NSURLSession和NSURLConnection功能相似昌渤,但是有幾點(diǎn)很重要的不同:
<1> NSURLSession API提供下載任務(wù)的行為很像NSURLDownload類(lèi),進(jìn)一步描述在Downloading the Contents of a URL to Disk.
<2> 當(dāng)你創(chuàng)建一個(gè)NSURLSession對(duì)象憔四,提供了一個(gè)重用配置對(duì)象膀息,它封裝了許多一般的配置選項(xiàng)。而NSURLConnection,你必須在每個(gè)連接獨(dú)立的設(shè)置這些選項(xiàng)
<3> NSURLConnection對(duì)象處理簡(jiǎn)單的請(qǐng)求和在線追蹤的請(qǐng)求
NSURLSession對(duì)象管理多任務(wù),所有這些代表單個(gè)URL請(qǐng)求和在線追蹤請(qǐng)求娄徊。當(dāng)你app發(fā)起時(shí),你一般創(chuàng)建一個(gè)session冗酿,之后你創(chuàng)建任務(wù),用創(chuàng)建NSURLConnection差不多同樣的方式
<4> 對(duì)于NSURLConnection络断,每個(gè)連接對(duì)象有分離的delegate裁替。對(duì)于NSURLSession,delegate在一個(gè)session中所有任務(wù)共享貌笨。如果你需要用不同的delegate胯究,必須新建session
當(dāng)你初始化NSURLSession or NSURLConnection對(duì)象,連接或會(huì)話在當(dāng)前run loop的默認(rèn)mode被自動(dòng)安排躁绸。
你提供的delegate在連接的整個(gè)過(guò)程中獲得通知,包括間隙調(diào)用URLSession:dataTask:didReceiveData:or a target="_self" connection:didReceiveData:方法,當(dāng)連接從服務(wù)器獲得額外的數(shù)據(jù)净刮。代理的責(zé)任就是追蹤已經(jīng)獲得的數(shù)據(jù)剥哑。
(1)如果數(shù)據(jù)能一次處理一段,那就這么做
(2)如果太小淹父,追加到NSMutableData
(3)如果太大株婴,就寫(xiě)入文件,在傳輸完成再處理
當(dāng)URLSession:task:didCompleteWithError:or connectionDidFinishLoading:被調(diào)用暑认,delegate獲得全部URL的數(shù)據(jù)困介。
(3)Downloading the Contents of a URL to Disk
你需要下載URL并存儲(chǔ)結(jié)果作為一個(gè)文件,但不想處理蘸际。NSURLSession用一步讓你直接下載URL到磁盤(pán)文件座哩。NSURLSession也允許你停止和繼續(xù)下載,重新開(kāi)始失敗下載粮彤,當(dāng)app掛起根穷,崩潰時(shí)候繼續(xù)下載。导坟。屿良。老版本iOS,必須用NSURLCon對(duì)象下載數(shù)據(jù)到內(nèi)存惫周,然后自己寫(xiě)數(shù)據(jù)到文件尘惧。
為了用NSURLSe來(lái)下載,代碼必須:
1.用自定義delegate創(chuàng)建session递递,你選擇的配置對(duì)象:
(1)如果你想當(dāng)app沒(méi)運(yùn)行繼續(xù)下載喷橙,當(dāng)創(chuàng)建session時(shí),必須提供后臺(tái)session配置對(duì)象(唯一標(biāo)識(shí)符)
(2)如不關(guān)心后臺(tái)下載漾狼,可以用任何提供的session配置對(duì)象類(lèi)型創(chuàng)建session
2.在session中創(chuàng)建和繼續(xù)一個(gè)或者更多下載任務(wù)
3.等待直到delegate獲得來(lái)自任務(wù)或者會(huì)話的調(diào)用重慢。必須實(shí)現(xiàn):
URLSession:downloadTask:didFinishDownloadingToURL:+URLSession:task:didCompleteWithError:
(4)Making a POST Request
可以用相同的方式生成HTTP orHTTPS POST,主要的不同是逊躁,必須首先配置一個(gè)NSMutableURLRequest對(duì)象似踱,提供給initWithRequest:delegate:。
需要構(gòu)建body data稽煤,以下三種方式之一:
<1> 上傳短的核芽,在內(nèi)存數(shù)據(jù),你應(yīng)該URL編碼已存在的數(shù)據(jù)塊酵熙。描述在Encoding URL Data
<2> 從磁盤(pán)上傳文件數(shù)據(jù)轧简,setHTTPBodyStream:告訴NSMutableURLRequest去讀取NSInputStream和用結(jié)果數(shù)據(jù)作為body文本
<3> 大塊結(jié)構(gòu)數(shù)據(jù),CFStreamCreateBoundPair創(chuàng)建一對(duì)流匾二,之后setHTTPBodyStream:告訴NSMutableURLRequest用其中一個(gè)流作為它body文本的源哮独。通過(guò)寫(xiě)入其他流拳芙,能一次發(fā)送一段數(shù)據(jù)。
(5)Configuring Authentication
對(duì)于NSURLSession皮璧,你的delegate要實(shí)現(xiàn)URLSession:task:didReceiveChallenge:completionHandler:舟扎。此方法中,你執(zhí)行無(wú)論什么你需要的操作來(lái)決定如何響應(yīng)悴务。之后通過(guò)常量調(diào)用完成block
<1> Possible Responses to an Authentication Challenge
<2> Creating a Credential Object
NSURLCredential
(6)Further Information
URL Session Programming Guide
Setting Up Socket Streams && Stream Programming Guide
Making Requests Using Core Foundation closely
Core Foundation URL Access Utilities Reference
CFNetwork Programming Guide
完全控制
Working with Web Services
NSXMLParser— SAX
libxml2 — SAX-style (streaming) and DOM-style (tree-based)
Using Sockets and Socket Streams
socket通信睹限,程序完全控制。
Choosing a Socket API
基于包的通信讯檐,CS唯一不同就是包文本
基于流的客戶端羡疗,初始化構(gòu)建通信渠道的方式非常不同
POSIX networking is discouraged
監(jiān)聽(tīng)端口,非TCP連接别洪,CFSocket
OC叨恨,F(xiàn) OC API
C,CF OC API
Using Networking Securely
Enabling TLS or SSL
Transport Layer Security (TLS) protocol提供基于socket通信的數(shù)據(jù)加密,與服務(wù)器認(rèn)證一起防止客戶端被騙蕉拢。
Secure Sockets Layer (SSL) protocol
(1)Connecting Securely to a URL —https
(2)Connecting Securely Using Streams —NSStream
(3)Connecting Securely Using BSD Sockets
OpenSSL
Common Mistakes
Designing Secure Helpers and Daemons
Secure Coding Guide
(1)Be Careful What Data You Trust
Validating Input and Interprocess Communication
(2)Know That Many Tiny Leaks Can Add Up to a Flood
social engineering
(3)Install Certificates Correctly
Platform-Specific Networking Technologies
iOS Requires You to Handle Backgrounding and Specify Cellular Usage Policies
捕獲網(wǎng)絡(luò)支持
后臺(tái)
WIFI only連接
(1)Restrict Cellular Networking Correctly
SCNetworkReachability—>kSCNetworkReachabilityFlagsIsWWAN
iOS 5之前的特例~~~
F特碳,NSMutableURLRequest —> setAllowsCellularAccess:來(lái)指定是否請(qǐng)求能發(fā)送通過(guò)蜂窩網(wǎng)絡(luò)。allowsCellularAccess
CF晕换,kCFStreamPropertyNoCellular午乓,CFSocketStream && CFHTTPStream
在老版本,繼續(xù)用kSCNetworkReachabilityFlagsIsWWAN最好了闸准,決定是否流量被發(fā)送通過(guò)蜂窩連接益愈,但是要知道它的限制。
(2)Handle Backgrounding Correctly
Networking and Multitasking
(3)Register VoIP Sockets Correctly
(4)Register for Captive Network Support
CaptiveNetwork Reference
Avoiding Common Networking Mistakes
Clean Up Your Connections
Avoid POSIX Sockets and CFSocket on iOS Where Possible
最合適的時(shí)機(jī)夷家,直接用socket蒸其,當(dāng)你開(kāi)發(fā)跨平臺(tái)工具或者高性能服務(wù)器軟件。
Avoid Synchronous Networking Calls on the Main Thread
如果你在主線程執(zhí)行網(wǎng)絡(luò)操作库快,必須只用異步調(diào)用摸袁。
Cocoa (Foundation) and CFNetwork (Core Foundation) Code
Threading Programming Guide
POSIX Code
Supporting IPv6 DNS64/NAT64 Networks
iOS Network
1. Get Up and Running
2. Become Proficient
3. Download Resources Using URLs
4. Interact with Web and File Servers Using HTTP and FTP Streams
5. Communicate Using Sockets
6 Register and Discover Network Services
3. Download Resources Using URLs
NSURL Class Objective-C Reference
4. Interact with Web and File Servers Using HTTP and FTP Streams
如果應(yīng)用與web服務(wù)器或者FTP服務(wù)器交互超出了CFURL或者NSURL APIs的能力,應(yīng)該考慮用CFHTTPStream and CFFTPStream APIs义屏。他們支持復(fù)雜的HTTP和FTP請(qǐng)求靠汁,如HTTP GET和POST請(qǐng)求,HTTP cookie和請(qǐng)求頭管理闽铐,F(xiàn)TP目錄讀取蝶怔,F(xiàn)TP文件上傳。
5. Communicate Using Sockets
運(yùn)用sockets兄墅,iOS提供run-loop socket集成在CF中的APIs踢星。
6. Register and Discover Network Services