APP開發(fā)必須懂的網(wǎng)絡(luò)常識
來源:荊州松滋軟件開發(fā)
時間:2017-05-11
不忘初心,方得始終。最近很多客戶都在咨詢APP定制開發(fā),但對于一些基本的網(wǎng)絡(luò)常識缺少認(rèn)識,其實APP開發(fā)是一件很嚴(yán)謹(jǐn)?shù)氖虑?,不管是需求分析還是場景演示,對開發(fā)環(huán)境和開發(fā)人員的要求都比較高,了解基本的網(wǎng)絡(luò)常識對于開發(fā)方案的理解會更深入透徹,有助于產(chǎn)品定位和服務(wù)品質(zhì)的提升,同時,對網(wǎng)絡(luò)公司有一個基本的判斷準(zhǔn)則,避免陷入低價所帶來的惡性產(chǎn)品循環(huán)和不必要的成本開支,也避免后期運(yùn)營中出現(xiàn)的初期愿景和現(xiàn)實產(chǎn)品的分離。湖北國菱計算機(jī)科技有限公司軟件開發(fā)部工程師給大家總結(jié)了一些APP開發(fā)必須懂的網(wǎng)絡(luò)常識。
1、網(wǎng)絡(luò)常用概念
網(wǎng)絡(luò)是應(yīng)用的靈魂,是所有應(yīng)用的數(shù)據(jù)來源.離開了網(wǎng)絡(luò),我們的應(yīng)用就是一潭死水,網(wǎng)絡(luò)是數(shù)據(jù)交互的媒介,我們通過網(wǎng)絡(luò)得到服務(wù)器上的數(shù)據(jù),也是通過網(wǎng)絡(luò)給服務(wù)器傳遞數(shù)據(jù).也就是說,網(wǎng)絡(luò)的實質(zhì)就 是是交互數(shù)據(jù),而數(shù)據(jù)交互的媒介就是在網(wǎng)絡(luò)中傳輸二進(jìn)制數(shù)據(jù)流(包括html/圖片/視頻數(shù)據(jù))。
互聯(lián)網(wǎng)開發(fā)的常用概念:
客戶端(Client):移動設(shè)備(手機(jī)/iPad等手持設(shè)備),客戶端一般就是前端/前臺等等.iOS,android開發(fā)都是前端開發(fā).
服務(wù)器(Server):為客戶端提供服務(wù)(比如數(shù)據(jù)/資源等)的機(jī)器---本質(zhì)也是一臺計算機(jī)(+服務(wù)器軟件),服務(wù)器開發(fā)就是后端/后臺開發(fā).java/php/.net等.
請求(Request):客戶端向服務(wù)器索取數(shù)據(jù).
響應(yīng)(Response):服務(wù)器對客戶端請求做出的反應(yīng),一般就是返回數(shù)據(jù)給客戶端.
服務(wù)器:按開發(fā)階段來分,分為兩種:
遠(yuǎn)程服務(wù)器: 外網(wǎng)服務(wù)器.應(yīng)用上線之后供全體用戶使用的服務(wù)器.速度取決于用戶的網(wǎng)速和服務(wù)器的性能.
本地服務(wù)器: 內(nèi)網(wǎng)服務(wù)器,測試服務(wù)器.開發(fā)測試階段使用的服務(wù)器.供內(nèi)部開發(fā)測試人員使用.速度飛快.
2.什么是IP地址
靜態(tài)IP地址:固定不變的IP地址,需要用戶自己手動設(shè)置.
動態(tài)IP地址:打開計算機(jī)后,自動生成的IP地址,不用人為設(shè)置。動態(tài)的IP地址是通過DHCP協(xié)議實現(xiàn)自動獲取的。
子網(wǎng)掩碼:與IP地址配合使用判斷兩臺計算機(jī)是否位于同一個子網(wǎng)絡(luò).
DNS服務(wù)器:可以將域名(網(wǎng)址)轉(zhuǎn)換成IP地址.
DHCP協(xié)議:每一個子網(wǎng)絡(luò)中,有一臺計算機(jī)負(fù)責(zé)管理本網(wǎng)絡(luò)的所有IP地址,它叫做“DHCP服務(wù)器”.當(dāng)新的計算機(jī)加入網(wǎng)絡(luò),必須向“DHCP服務(wù)器”發(fā)
送一個“DHCP請求”數(shù)據(jù)包,申請IP地址和相關(guān)的網(wǎng)絡(luò)參數(shù).然后DHCP協(xié)議會賦予本機(jī)一些參數(shù),如動態(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),都需要確定這四個參數(shù):本機(jī)IP地址, 子網(wǎng)掩碼, 網(wǎng)關(guān)的IP地址, DNS的IP地址。
3.HTTP請求
通俗地說,網(wǎng)絡(luò)協(xié)議就是網(wǎng)絡(luò)之間溝通、交流的橋梁,只有相同網(wǎng)絡(luò)協(xié)議的計算機(jī)才能進(jìn)行信息的溝通與交流。這就好比人與人之間交流所使用的各種語言一樣,只有使用相同語言才能正常、順利地進(jìn)行交流。從專業(yè)角度定義,網(wǎng)絡(luò)協(xié)議是計算機(jī)在網(wǎng)絡(luò)中實現(xiàn)通信時必須遵守的約定,也就是通信協(xié)議。主要是對信息傳輸?shù)乃俾?、傳輸代碼、代碼結(jié)構(gòu)、傳輸控制步驟、出錯控制等作出規(guī)定并制定出標(biāo)準(zhǔn)。
3.1. URL(Uniform Resource Locator):
統(tǒng)一資源定位符.URL就是資源的地址,位置.通過一個URL能夠找到互聯(lián)網(wǎng)上唯一的一個資源.
URL的基本格式: 協(xié)議://主機(jī)地址/路徑
協(xié)議:不同的協(xié)議代表不同的資源查找方式,資源傳輸方式.
URL中的常見協(xié)議:
<1>HTTP:超文本傳輸協(xié)議,在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議.訪問的是遠(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)頭長度為20字節(jié).加上嵌入的TCP數(shù)據(jù)包,現(xiàn)在總長度是5000字節(jié)
<3>file:訪問的時本地計算機(jī)上的資源.格式:file://(不要再加主機(jī)地址了)
<4>FTP:訪問的是共享主機(jī)的文件資源.格式:ftp://
<5>TCP協(xié)議:
TCP數(shù)據(jù)包標(biāo)頭需要設(shè)置端口,接收方(Baidu)的HTTP端口默認(rèn)是80,發(fā)送方(本機(jī))的端口是一個隨機(jī)生成的1024~65535之間的整數(shù).
TCP數(shù)據(jù)包的標(biāo)頭長度是20字節(jié).加上嵌入的HTTP數(shù)據(jù)包,現(xiàn)在總長度是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地址(通過ARP協(xié)議得到), 以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最大長度為1500字節(jié),而現(xiàn)在的IP數(shù)據(jù)包長度為5000字節(jié).因此,IP數(shù)據(jù)包必須分割成四個包,因為每個包都有自己的IP標(biāo)頭(20字節(jié)),所以四個包的IP數(shù)據(jù)包的長度分別為1500 ,1500, 1500,560 字節(jié).
<7>mailto:訪問的是電子郵件地址.格式:mailto:
主機(jī)地址:存放資源的主機(jī)IP地址(域名).
路徑:資源在主機(jī)中得具體位置.
3.2. HTTP請求的完整過程:
<1> 請求: 客戶端發(fā)出請求.向服務(wù)器索要數(shù)據(jù)(操作數(shù)據(jù)).
<2> 響應(yīng): 服務(wù)器對客戶端的請求做出響應(yīng).返回客戶端所需要的數(shù)據(jù).
3.3. 包裝一個HTTP請求
用 NSURLRequest 來包裝一個HTTP請求.可以指定緩存策略和超時時間,緩存策略的選擇:NSURLRequestCachePolicy
NSURLRequestUseProtocolCachePolicy = 0, // 默認(rèn)的緩存策略,使用協(xié)議定義. NSURLRequestReloadIgnoringLocalCacheData = 1, // 忽略本地緩存,直接從原始服務(wù)器地址下載. NSURLRequestReturnCacheDataElseLoad = 2, // 只有在緩存中不存在數(shù)據(jù)時,才從原始地址下載 NSURLRequestReturnCacheDataDontLoad = 3, // 只使用緩存數(shù)據(jù),如果不存在緩存,則請求失敗. 用于沒有網(wǎng)絡(luò)連接的離線模式 NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // 忽略遠(yuǎn)程和本地的數(shù)據(jù)緩存,直接從原始地址下載 NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData = 1, // 忽略緩存,直接從原始服務(wù)器地址下載. NSURLRequestReloadRevalidatingCacheData = 5, // 驗證本地數(shù)據(jù)和遠(yuǎn)程數(shù)據(jù)是否相同,如果不同則下載遠(yuǎn)程數(shù)據(jù),否則使用本地數(shù)據(jù)
網(wǎng)絡(luò)緩存數(shù)據(jù),保存在SQLite的數(shù)據(jù)庫中(NSHomeDirectory),
網(wǎng)絡(luò)緩存數(shù)據(jù),保存在SQLite的數(shù)據(jù)庫中(NSHomeDirectory)
3.4. 發(fā)送請求
用 NSURLConnection 發(fā)送請求.
同步方法:
+ (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ò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
(1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。
(2)客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。
(3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽,繼續(xù)接收其他客戶端套接字的連接請求。
分步驟創(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)
湖北國菱計算機(jī)科技有限公司軟件開發(fā)部面向荊州松滋乃止全國客戶,提供軟件開發(fā)、APP開發(fā)、網(wǎng)站建設(shè)和網(wǎng)絡(luò)應(yīng)用開發(fā)等服務(wù)。我們所關(guān)注的一些業(yè)界包括電子商務(wù)、電子政務(wù)、辦公室自動化、金融服務(wù)、公共衛(wèi)生、物聯(lián)網(wǎng)和多媒體等。我們的服務(wù)可以為客戶提供一個專門的開發(fā)團(tuán)隊或承接您公司內(nèi)部的項目,擅長為客戶定制應(yīng)用程序開發(fā),請點擊瀏覽我們的成功案例。歡迎來電洽談合作:0716-6666211.