Network

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 GuideCFNetServices 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


NSJSONSerialization

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

Secure Transport Reference

OpenSSL


Common Mistakes


Designing Secure Helpers and Daemons

Secure Coding Guide

(1)Be Careful What Data You Trust

Validating Input and Interprocess Communication

Secure Coding Guide

(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

App Programming Guide for iOS

(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

CFURL Reference

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文件上傳。

CFNetwork Programming Guide

CFHTTPStream Reference

CFFTPStream Reference??


5. Communicate Using Sockets

運(yùn)用sockets兄墅,iOS提供run-loop socket集成在CF中的APIs踢星。

CFNetwork Framework Reference

UNIX Socket FAQ


6. Register and Discover Network Services

NSNetServices and CFNetServices Programming Guide

CFNetServices Reference?and?NSNetService Class Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市隙咸,隨后出現(xiàn)的幾起案子沐悦,更是在濱河造成了極大的恐慌成洗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藏否,死亡現(xiàn)場(chǎng)離奇詭異泌枪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秕岛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)误证,“玉大人继薛,你說(shuō)我怎么就攤上這事∮保” “怎么了遏考?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蓝谨。 經(jīng)常有香客問(wèn)我灌具,道長(zhǎng),這世上最難降的妖魔是什么譬巫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任咖楣,我火速辦了婚禮,結(jié)果婚禮上芦昔,老公的妹妹穿的比我還像新娘诱贿。我一直安慰自己,他們只是感情好咕缎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布珠十。 她就那樣靜靜地躺著,像睡著了一般凭豪。 火紅的嫁衣襯著肌膚如雪焙蹭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天嫂伞,我揣著相機(jī)與錄音孔厉,去河邊找鬼。 笑死末早,一個(gè)胖子當(dāng)著我的面吹牛烟馅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播然磷,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼郑趁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了姿搜?” 一聲冷哼從身側(cè)響起寡润,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捆憎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后梭纹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體躲惰,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年变抽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了础拨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍载,死狀恐怖诡宗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情击儡,我是刑警寧澤塔沃,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站阳谍,受9級(jí)特大地震影響蛀柴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矫夯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一鸽疾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茧痒,春花似錦肮韧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至区拳,卻和暖如春拘领,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背樱调。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工约素, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笆凌。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓圣猎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乞而。 傳聞我的和親對(duì)象是個(gè)殘疾皇子送悔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容