1、網(wǎng)絡(luò)常用概念 網(wǎng)絡(luò)是應(yīng)用的靈魂,是所有應(yīng)用的數(shù)據(jù)來(lái)源.離開了網(wǎng)絡(luò),我們的應(yīng)用就是一潭死水,,網(wǎng)絡(luò)是數(shù)據(jù)交互的媒介,我們通過(guò)網(wǎng)絡(luò)得到服務(wù)器上的數(shù)據(jù),也是通過(guò)網(wǎng)絡(luò)給服務(wù)器傳遞數(shù)據(jù).也就是說(shuō),網(wǎng)絡(luò)的實(shí)質(zhì)就 是是交互數(shù)據(jù),,而數(shù)據(jù)交互的媒介就是在網(wǎng)絡(luò)中傳輸二進(jìn)制數(shù)據(jù)流(包括html/圖片/視頻數(shù)據(jù))。 互聯(lián)網(wǎng)開發(fā)的常用概念: 客戶端(Client):移動(dòng)設(shè)備(手機(jī)/iPad等手持設(shè)備),,客戶端一般就是前端/前臺(tái)等等.iOS,android開發(fā)都是前端開發(fā). 服務(wù)器(Server):為客戶端提供服務(wù)(比如數(shù)據(jù)/資源等)的機(jī)器---本質(zhì)也是一臺(tái)計(jì)算機(jī)(+服務(wù)器軟件),,服務(wù)器開發(fā)就是后端/后臺(tái)開發(fā).java/php/.net等. 請(qǐng)求(Request):客戶端向服務(wù)器索取數(shù)據(jù). 響應(yīng)(Response):服務(wù)器對(duì)客戶端請(qǐng)求做出的反應(yīng),一般就是返回?cái)?shù)據(jù)給客戶端. 服務(wù)器:按開發(fā)階段來(lái)分,分為兩種: 遠(yuǎn)程服務(wù)器: 外網(wǎng)服務(wù)器.應(yīng)用上線之后供全體用戶使用的服務(wù)器.速度取決于用戶的網(wǎng)速和服務(wù)器的性能. 本地服務(wù)器: 內(nèi)網(wǎng)服務(wù)器,測(cè)試服務(wù)器.開發(fā)測(cè)試階段使用的服務(wù)器.供內(nèi)部開發(fā)測(cè)試人員使用.速度飛快. 2.什么是IP地址 靜態(tài)IP地址:固定不變的IP地址,需要用戶自己手動(dòng)設(shè)置. 動(dòng)態(tài)IP地址:打開計(jì)算機(jī)后,自動(dòng)生成的IP地址,,不用人為設(shè)置,。動(dòng)態(tài)的IP地址是通過(guò)DHCP協(xié)議實(shí)現(xiàn)自動(dòng)獲取的。 子網(wǎng)掩碼:與IP地址配合使用判斷兩臺(tái)計(jì)算機(jī)是否位于同一個(gè)子網(wǎng)絡(luò). DNS服務(wù)器:可以將域名(網(wǎng)址)轉(zhuǎn)換成IP地址. DHCP協(xié)議:每一個(gè)子網(wǎng)絡(luò)中,有一臺(tái)計(jì)算機(jī)負(fù)責(zé)管理本網(wǎng)絡(luò)的所有IP地址,它叫做“DHCP服務(wù)器”.當(dāng)新的計(jì)算機(jī)加入網(wǎng)絡(luò),必須向“DHCP服務(wù)器”發(fā) 送一個(gè)“DHCP請(qǐng)求”數(shù)據(jù)包,申請(qǐng)IP地址和相關(guān)的網(wǎng)絡(luò)參數(shù).然后DHCP協(xié)議會(huì)賦予本機(jī)一些參數(shù),,如動(dòng)態(tài)IP地址,子網(wǎng)掩碼,網(wǎng)關(guān),DNS服務(wù)器等. 以太網(wǎng)標(biāo)頭:設(shè)置發(fā)出方(本機(jī))的MAC地址和接收方(DHCP服務(wù)器)的MAC地址. IP標(biāo)頭:設(shè)置發(fā)出方(本機(jī))的IP地址和接收方(DHCP服務(wù)器)的IP地址 UDP標(biāo)頭:設(shè)置發(fā)出方(本機(jī))的端口和接收方(DHCP服務(wù)器)的端口. 這一部分是DHCP協(xié)議規(guī)定好的,發(fā)出方是68端口,接收方是67端口. 所以電腦想要上網(wǎng),都需要確定這四個(gè)參數(shù):本機(jī)IP地址, 子網(wǎng)掩碼, 網(wǎng)關(guān)的IP地址, DNS的IP地址,。 3.HTTP請(qǐng)求 通俗地說(shuō),網(wǎng)絡(luò)協(xié)議就是網(wǎng)絡(luò)之間溝通,、交流的橋梁,,只有相同網(wǎng)絡(luò)協(xié)議的計(jì)算機(jī)才能進(jìn)行信息的溝通與交流。這就好比人與人之間交流所使用的各種語(yǔ)言一樣,,只有使用相同語(yǔ)言才能正常,、順利地進(jìn)行交流。從專業(yè)角度定義,,網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)在網(wǎng)絡(luò)中實(shí)現(xiàn)通信時(shí)必須遵守的約定,,也就是通信協(xié)議。主要是對(duì)信息傳輸?shù)乃俾?、傳輸代碼,、代碼結(jié)構(gòu)、傳輸控制步驟,、出錯(cuò)控制等作出規(guī)定并制定出標(biāo)準(zhǔn),。 3.1. URL(Uniform Resource Locator): 統(tǒng)一資源定位符.URL就是資源的地址,位置.通過(guò)一個(gè)URL能夠找到互聯(lián)網(wǎng)上唯一的一個(gè)資源. URL的基本格式: 協(xié)議://主機(jī)地址/路徑 協(xié)議:不同的協(xié)議代表不同的資源查找方式,資源傳輸方式. URL中的常見協(xié)議: <1>HTTP:超文本傳輸協(xié)議,在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議.訪問(wèn)的是遠(yuǎn)程的網(wǎng)絡(luò)資源.格式:http://... <2>IP協(xié)議: TCP數(shù)據(jù)包嵌入IP數(shù)據(jù)包.IP數(shù)據(jù)包標(biāo)頭需要設(shè)置雙方的IP地址.發(fā)送方(本機(jī))是:192.168.2.6 ,接收方(百度)是:119.75.218.70 IP數(shù)據(jù)包的標(biāo)頭長(zhǎng)度為20字節(jié).加上嵌入的TCP數(shù)據(jù)包,現(xiàn)在總長(zhǎng)度是5000字節(jié) <3>file:訪問(wèn)的時(shí)本地計(jì)算機(jī)上的資源.格式:file://(不要再加主機(jī)地址了) <4>FTP:訪問(wèn)的是共享主機(jī)的文件資源.格式:ftp:// <5>TCP協(xié)議: TCP數(shù)據(jù)包標(biāo)頭需要設(shè)置端口,接收方(Baidu)的HTTP端口默認(rèn)是80,發(fā)送方(本機(jī))的端口是一個(gè)隨機(jī)生成的1024~65535之間的整數(shù). TCP數(shù)據(jù)包的標(biāo)頭長(zhǎng)度是20字節(jié).加上嵌入的HTTP數(shù)據(jù)包,現(xiàn)在總長(zhǎng)度是4980字節(jié). <6>以太網(wǎng)協(xié)議 IP數(shù)據(jù)包嵌入以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分.以太網(wǎng)數(shù)據(jù)包的標(biāo)頭需要設(shè)置雙方的MAC地址.發(fā)送方為本機(jī)的網(wǎng)卡MAC地址,接收方為網(wǎng)關(guān)192.168.2.1的MAC地址(通過(guò)ARP協(xié)議得到), 以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最大長(zhǎng)度為1500字節(jié),而現(xiàn)在的IP數(shù)據(jù)包長(zhǎng)度為5000字節(jié).因此,IP數(shù)據(jù)包必須分割成四個(gè)包,因?yàn)槊總€(gè)包都有自己的IP標(biāo)頭(20字節(jié)),所以四個(gè)包的IP數(shù)據(jù)包的長(zhǎng)度分別為1500 ,1500, 1500,560 字節(jié). <7>mailto:訪問(wèn)的是電子郵件地址.格式:mailto: 主機(jī)地址:存放資源的主機(jī)IP地址(域名). 路徑:資源在主機(jī)中得具體位置. 3.2. HTTP請(qǐng)求的完整過(guò)程: <1> 請(qǐng)求: 客戶端發(fā)出請(qǐng)求.向服務(wù)器索要數(shù)據(jù)(操作數(shù)據(jù)). <2> 響應(yīng): 服務(wù)器對(duì)客戶端的請(qǐng)求做出響應(yīng).返回客戶端所需要的數(shù)據(jù). 3.3. 包裝一個(gè)HTTP請(qǐng)求 用 NSURLRequest 來(lái)包裝一個(gè)HTTP請(qǐng)求.可以指定緩存策略和超時(shí)時(shí)間,緩存策略的選擇:NSURLRequestCachePolicy NSURLRequestUseProtocolCachePolicy = 0,// 默認(rèn)的緩存策略,使用協(xié)議定義.NSURLRequestReloadIgnoringLocalCacheData = 1,// 忽略本地緩存,直接從原始服務(wù)器地址下載.NSURLRequestReturnCacheDataElseLoad = 2,// 只有在緩存中不存在數(shù)據(jù)時(shí),才從原始地址下載NSURLRequestReturnCacheDataDontLoad = 3,// 只使用緩存數(shù)據(jù),如果不存在緩存,則請(qǐng)求失敗. 用于沒有網(wǎng)絡(luò)連接的離線模式NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,// 忽略遠(yuǎn)程和本地的數(shù)據(jù)緩存,直接從原始地址下載NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData = 1,// 忽略緩存,直接從原始服務(wù)器地址下載.NSURLRequestReloadRevalidatingCacheData = 5,// 驗(yàn)證本地?cái)?shù)據(jù)和遠(yuǎn)程數(shù)據(jù)是否相同,如果不同則下載遠(yuǎn)程數(shù)據(jù),否則使用本地?cái)?shù)據(jù) 網(wǎng)絡(luò)緩存數(shù)據(jù),保存在SQLite的數(shù)據(jù)庫(kù)中(NSHomeDirectory), 3.4. 發(fā)送請(qǐng)求 用 NSURLConnection 發(fā)送請(qǐng)求. 同步方法: + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error; 異步方法: + (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler 4.Socket介紹 網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,,客戶端請(qǐng)求,,連接確認(rèn)。 (1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,,而是處于等待連接的狀態(tài),,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),。 (2)客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,,指出服務(wù)器端套接字的地址和端口號(hào),,然后就向服務(wù)器端套接字提出連接請(qǐng)求。 (3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求,,它就響應(yīng)客戶端套接字的請(qǐng)求,,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,,一旦客戶端確認(rèn)了此描述,,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽,,繼續(xù)接收其他客戶端套接字的連接請(qǐng)求,。 分步驟創(chuàng)建Socket 1.創(chuàng)建客戶端Socket socket(<#int#>, <#int#>, <#int#>); 2.創(chuàng)建服務(wù)器Socket struct sockaddr_in serverAddress; 3.連接到服務(wù)器(Socket編程) connect(<#int#>, <#const struct sockaddr *#>, <#socklen_t#>); 4.發(fā)送數(shù)據(jù)給服務(wù)器 send(<#int#>, <#const void *#>, <#size_t#>, <#int#>) 5.接收服務(wù)器返回的數(shù)據(jù) recv(<#int#>, <#void *#>, <#size_t#>, <#int#>) 6.關(guān)閉 Socket close(socketNumber) |
|
來(lái)自: 完顏阿骨打矩陣 > 《計(jì)算機(jī)》