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