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