展開
湖北國聯(lián)計(jì)算機(jī)科技有限公司
  • 首頁HOME
  • 公司簡介INTRODUCTION
  • 安全防御DEFENSE
  • 軟件開發(fā)SOFTWARE
  • 物聯(lián)網(wǎng)IOT
  • 運(yùn)行維護(hù)SRE
  • 成功案例CASE
  • 聯(lián)系我們CONTACT
  • Software Technology Sharing |技術(shù)分享

    APP開發(fā)必須懂的網(wǎng)絡(luò)常識
    來源:荊州松滋軟件開發(fā) 時(shí)間:2017-05-11

    不忘初心,方得始終。最近很多客戶都在咨詢APP定制開發(fā),但對于一些基本的網(wǎng)絡(luò)常識缺少認(rèn)識,其實(shí)APP開發(fā)是一件很嚴(yán)謹(jǐn)?shù)氖虑?,不管是需求分析還是場景演示,對開發(fā)環(huán)境和開發(fā)人員的要求都比較高,了解基本的網(wǎng)絡(luò)常識對于開發(fā)方案的理解會更深入透徹,有助于產(chǎn)品定位和服務(wù)品質(zhì)的提升,同時(shí),對網(wǎng)絡(luò)公司有一個(gè)基本的判斷準(zhǔn)則,避免陷入低價(jià)所帶來的惡性產(chǎn)品循環(huán)和不必要的成本開支,也避免后期運(yùn)營中出現(xiàn)的初期愿景和現(xiàn)實(shí)產(chǎn)品的分離。湖北國菱計(jì)算機(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ò)的實(shí)質(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ì)算機(jī)(+服務(wù)器軟件),服務(wù)器開發(fā)就是后端/后臺開發(fā).java/php/.net等.

    請求(Request):客戶端向服務(wù)器索取數(shù)據(jù).

    響應(yīng)(Response):服務(wù)器對客戶端請求做出的反應(yīng),一般就是返回?cái)?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ì)算機(jī)后,自動生成的IP地址,不用人為設(shè)置。動態(tài)的IP地址是通過DHCP協(xié)議實(shí)現(xiàn)自動獲取的。
    子網(wǎng)掩碼:與IP地址配合使用判斷兩臺計(jì)算機(jī)是否位于同一個(gè)子網(wǎng)絡(luò).
    DNS服務(wù)器:可以將域名(網(wǎng)址)轉(zhuǎn)換成IP地址.
    DHCP協(xié)議:每一個(gè)子網(wǎng)絡(luò)中,有一臺計(jì)算機(jī)負(fù)責(zé)管理本網(wǎng)絡(luò)的所有IP地址,它叫做“DHCP服務(wù)器”.當(dāng)新的計(jì)算機(jī)加入網(wǎng)絡(luò),必須向“DHCP服務(wù)器”發(fā)
    送一個(gè)“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),都需要確定這四個(gè)參數(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ī)才能進(jìn)行信息的溝通與交流。這就好比人與人之間交流所使用的各種語言一樣,只有使用相同語言才能正常、順利地進(jìn)行交流。從專業(yè)角度定義,網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)在網(wǎng)絡(luò)中實(shí)現(xiàn)通信時(shí)必須遵守的約定,也就是通信協(xié)議。主要是對信息傳輸?shù)乃俾省鬏敶a、代碼結(jié)構(gòu)、傳輸控制步驟、出錯(cuò)控制等作出規(guī)定并制定出標(biāo)準(zhǔn)。

    3.1. URL(Uniform Resource Locator):
    統(tǒng)一資源定位符.URL就是資源的地址,位置.通過一個(gè)URL能夠找到互聯(lián)網(wǎng)上唯一的一個(gè)資源.
    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:訪問的時(shí)本地計(jì)算機(jī)上的資源.格式:file://(不要再加主機(jī)地址了)
    <4>FTP:訪問的是共享主機(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)頭長度是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ù)包必須分割成四個(gè)包,因?yàn)槊總€(gè)包都有自己的IP標(biāo)頭(20字節(jié)),所以四個(gè)包的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. 包裝一個(gè)HTTP請求
    用 NSURLRequest 來包裝一個(gè)HTTP請求.可以指定緩存策略和超時(shí)時(shí)間,緩存策略的選擇:NSURLRequestCachePolicy
    NSURLRequestUseProtocolCachePolicy = 0, // 默認(rèn)的緩存策略,使用協(xié)議定義. NSURLRequestReloadIgnoringLocalCacheData = 1, // 忽略本地緩存,直接從原始服務(wù)器地址下載. NSURLRequestReturnCacheDataElseLoad = 2, // 只有在緩存中不存在數(shù)據(jù)時(shí),才從原始地址下載 NSURLRequestReturnCacheDataDontLoad = 3, // 只使用緩存數(shù)據(jù),如果不存在緩存,則請求失敗. 用于沒有網(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ù)庫中(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ò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
    (1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。
    (2)客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。
    (3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個(gè)新的線程,把服務(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ì)算機(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ù)可以為客戶提供一個(gè)專門的開發(fā)團(tuán)隊(duì)或承接您公司內(nèi)部的項(xiàng)目,擅長為客戶定制應(yīng)用程序開發(fā),請點(diǎn)擊瀏覽我們的成功案例。歡迎來電洽談合作:0716-6666211.

    荊州地區(qū)政府網(wǎng)站建設(shè) 解決方案 專業(yè)團(tuán)隊(duì) 騰訊第三方平臺 地址:湖北省荊州市沙市區(qū)荊沙大道楚天都市佳園一期C區(qū)29棟112       地址:湖北省松滋市新江口街道才知文化廣場1幢1146-1151室     郵編:434200 聯(lián)系電話:0716-6666211     網(wǎng)站編輯部郵箱:business@gl-ns.com 鄂公網(wǎng)安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業(yè)名稱:湖北國菱計(jì)算機(jī)科技有限公司