iOS:即時通訊之

什麼是socket?

計算機專業術語就是:

網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱爲一個socket。Socket的英文原義是“孔”或“插座”。作爲BSD UNIX的進程通信機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個端口上,不同的端口對應於不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務

通俗語:

Socket稱"套接字”

網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱爲一個socket端,平時我們向服務器發送一個網絡請求,然後服務器響應請求,返回服務器數據應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求


細節:

1.Socket相當於一個“管道”或者說“隧道”兩邊的連接,一個進入,一個出來

2.用戶名和密碼是存儲在服務器的數據庫中

3.我們要保證客戶端程序是訪問web應用程序還是數據庫應用程序呢?就是通過端口號


網絡通信要素:

1.網絡上的請求就是通過Socket來建立連接然後互相通信

2.IP地址(網絡上主機設備的唯一標識)(尋找服務器的主機)

3.端口號(定位程序)

4.用於標示進程(一個程序就是一個進程)的邏輯地址,不同進程的標示

5.有效端口:0~65535,其中0~1024由系統使用或者保留端口,開發中建議使用1024以上的端口

6.傳輸協議(用什麼樣的方式進行交互)(方式就是TCP和UDP需要還是不需要建立連接。就像快遞一樣,像順豐或者是圓通就是一個方式)

7.通訊的規則 (常見協議:TCP、UDP)

TCP:



三次握手,是爲了數據的安全性和可靠性  比如打電話:

第一次握手:先撥過去

第二次握手:對方“喂”了一聲,響應一下,

第三次握手:我聽到對方之後,也說了一句“喂” ,響應。

只有這三個步驟,別人喂了一聲,你也喂了一聲,它能聽到我的響應,我還能聽到它的響應纔是成功的。假如借錢,這樣才能保證了安全性和可靠性

1.必須建立連接,效率會稍低(每一次都要建立連接)

2.進行了多少次HTTP請求,就進行了多少次三次握手(HTTP是效率低低些,但是影響不大,因爲用戶下次發送網絡請求的時間不固定,所以沒有多大影響)(打電話如果一直保持,電話費不就多了嗎)

3.HTTP就是每發送一次請求,就建立一次TCP連接,三次握手


UDP:


將數據及源和目的封裝成數據包中,不需要建立連接(就像老師(源)屏幕廣播,就及時的把數據同步發送到你的電腦上(目的),直接發送。假如網絡斷了,再次看到屏幕的時候,只能看到最新的內容。沒了就沒了,錯過了就錯過了)

每個數據報的大小限制在64Kb之內(首先是實時的,如果數據弄大點,如果出問題,就不會有太大的破壞)

因爲無需連接,因此是不可靠協議(省去了三次握手,性能就高了)

不需要建立連接,速度快



應用:


Socket通信流程圖:





1.bind()就是綁定端口      (服務器要有端口標識自己)

2.listen()就是監聽端口看有沒有lianjie過來,我同意就接受連接      (假如客戶端要連接web應用程序端口,就要監聽80端口。假如是惡意攻擊,多次併發請求,會造成網絡阻塞,那我就可以斷開你的連接)

3.accept()

4.write()客戶端發請求

5.read()服務端接受請求


假如客戶端發送登錄請求,我服務器是要做出來請求的,服務器要做迴應數據,發數據給客戶端,做一個write()寫的操作一個HTTP的請求完了後,接下有個操作,結束連接。因爲下次請求的時間是不固定的。就做一個close()操作

HTTP的底層就通過Socket建立連接通信管道,實現數據的傳輸

HTTP是一個TCP的傳輸協議(方式),它是一個可靠的安全的協議


實現Socket服務端監聽方法:

1:實現socket的監聽方法就是使用C語言實現(系統默認就有,但是麻煩)

2:使用CocoaAsyncSocket第三方框(是OC的),內部是對C的封裝,耗時操作肯定是耗時的,開發的時候,我們也是用的這個框架

3:Telnet命令 telnet host port/telnet 192.168.10.10 5288  telnet命令是連接服務器上的某個端口對應的服務


Socket層上的協議:

1.Socket層上的協議指的數據傳輸的格式:


2:HTTP協議(類似於字典的協議)


3:XMPP協議(是一款即時通訊協議(目的是定義數據傳輸的格式)


4:自定義即時通訊協議,json格式






補充:TCP、UDP、HTTP、SOCKET之間的區別

IP:網絡層協議;

TCP和UDP:傳輸層協議;

HTTP:應用層協議;

SOCKET:TCP/IP網絡的API。

TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。

TCP和UDP使用IP協議從一個網絡傳送數據包到另一個網絡。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。

TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的數據傳輸,而UDP不提供。這意味着TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。

記住,需要IP協議來連接網絡;TCP是一種允許我們安全傳輸數據的機制,,使用TCP協議來傳輸數據的HTTP是Web服務器和客戶端使用的特殊協議。

Socket 接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,用以開發TCP/IP網絡上的應用程序。



文/iOS開發到放棄(簡書作者)
原文鏈接:http://www.jianshu.com/p/3167802eb1e5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章