什么是Socket
計(jì)算機(jī)專業(yè)術(shù)語(yǔ)就是:
網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換突梦,這個(gè)連接的一端稱為一個(gè)socket。Socket的英文原義是“孔”或“插座”羽利。作為BSD UNIX的進(jìn)程通信機(jī)制宫患,取后一種意思。通常也稱作”套接字“铐伴,用于描述IP地址和端口撮奏,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信当宴。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件畜吊,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開一個(gè)Socket户矢,并綁定到一個(gè)端口上玲献,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,像一個(gè)多孔插座捌年。一臺(tái)主機(jī)猶如布滿各種插座的房間瓢娜,每個(gè)插座有一個(gè)編號(hào),有的插座提供220伏交流電礼预, 有的提供110伏交流電眠砾,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號(hào)的插座托酸,就可以得到不同的服務(wù)褒颈。
通俗語(yǔ)
Socket稱"套接字"
網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)Socket端,平時(shí)我們向服務(wù)器發(fā)送一個(gè)網(wǎng)絡(luò)請(qǐng)求,然后服務(wù)器響應(yīng)請(qǐng)求,返回服務(wù)器數(shù)據(jù)應(yīng)用程序通常通過(guò)"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求
細(xì)節(jié):
1.Socket相當(dāng)于一個(gè)"管道"或者說(shuō)"隧道"兩邊的連接,一個(gè)進(jìn)入,一個(gè)出來(lái)
2.用戶名和密碼是存儲(chǔ)在服務(wù)器的數(shù)據(jù)庫(kù)中
3.我們要保證客戶端程序是訪問(wèn)web應(yīng)用程序還是數(shù)據(jù)庫(kù)應(yīng)用程序呢?就是通過(guò)端口號(hào)
網(wǎng)絡(luò)通信要素:
1.網(wǎng)絡(luò)上的請(qǐng)求就是通過(guò)Socket來(lái)建立連接后互相通信
2.IP地址(網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識(shí))(尋找服務(wù)器的主機(jī))
3.端口號(hào)(定位程序)
4.用于標(biāo)示進(jìn)程(一個(gè)程序就是一個(gè)進(jìn)程)的邏輯地址,不同進(jìn)程的標(biāo)示
5.有效端口:065535,其中01024由系統(tǒng)使用或者保留端口,開發(fā)中建議使用1024以上的端口
6.傳輸協(xié)議(用什么樣的方式進(jìn)行交互)(方式就是TCP和UDP需要還是不需要建立連接。)
7.通訊的規(guī)則(常見(jiàn)協(xié)議:TCP励堡、UDP)
TCP:
三次握手,是為了數(shù)據(jù)的安全性和可靠性 比如打電話
第一次握手:先撥過(guò)去
第二次握手:對(duì)方"喂"了一聲,響應(yīng)一下,
第三次握手:我聽(tīng)到對(duì)方之后,也說(shuō)了一句"喂",響應(yīng)谷丸。
只有這三個(gè)步驟,別人喂了一聲,你也喂了一聲,它能聽(tīng)到我的響應(yīng),我還能聽(tīng)到它的響應(yīng)才是成功的。加入借錢,這樣才能保證了安全性和可靠性
1.必須建立連接,效率會(huì)稍低(每一次都要建立連接)
2.進(jìn)行了多少次HTTP請(qǐng)求,就進(jìn)行了多少次三次握手(HTTP是效率低些,但是影響不大,因?yàn)橛脩粝麓伟l(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)間不固定,所以沒(méi)有多大影響)(打電話如果一直保持,電話費(fèi)不就多了嗎)
3.HTTP就是每發(fā)送一次請(qǐng)求,就建立一次TCP連接,三次握手
UDP:
將數(shù)據(jù)及源和目的封裝到數(shù)據(jù)包中,不需要建立連接(就像老師(源)屏幕廣播,就及時(shí)的把數(shù)據(jù)同步發(fā)送到你的電腦上(目的),直接發(fā)送应结。假如網(wǎng)絡(luò)斷了,再次看到屏幕的時(shí)候,只能看到最新的內(nèi)容刨疼。沒(méi)了就沒(méi)了,錯(cuò)過(guò)了就錯(cuò)過(guò)了)
每個(gè)數(shù)據(jù)包的大小限制在64Kb之內(nèi)(首先是實(shí)時(shí)的,數(shù)據(jù)弄小點(diǎn),如果出問(wèn)題,就不會(huì)有太大的破壞)
因?yàn)闊o(wú)需連接,因此是不可靠協(xié)議(省去了三次握手,性能就高了)
不需要建立連接,速度快
應(yīng)用:
Socket通信流程圖:
1.bind()就是綁定端口(服務(wù)器要有端口標(biāo)識(shí)自己)
2.listen()就是監(jiān)聽(tīng)端口看有沒(méi)有連接過(guò)來(lái),我同意就接收連接 (假如客戶端要連接web應(yīng)用程序端口,就要監(jiān)聽(tīng)80端口。假如是惡意攻擊,多次并發(fā)請(qǐng)求,會(huì)造成網(wǎng)絡(luò)阻塞,那我就可以斷開你的連接)
3.accept()接收或拒絕網(wǎng)絡(luò)請(qǐng)求
4.write()客戶端發(fā)請(qǐng)求
5.read()服務(wù)端接受請(qǐng)求
假如客戶端發(fā)送登錄請(qǐng)求,我服務(wù)器是要做出來(lái)請(qǐng)求的,服務(wù)器要做回應(yīng)數(shù)據(jù),發(fā)數(shù)據(jù)給客戶端,做一個(gè)write()的操作一個(gè)HTTP的請(qǐng)求完了后,接下有個(gè)操作,結(jié)束連接鹅龄。因?yàn)橄麓握?qǐng)求的時(shí)間是不固定的揩慕。就做一個(gè)close()操作
HTTP的底層就通過(guò)Socket建立連接通信管道。實(shí)現(xiàn)數(shù)據(jù)的傳輸
HTTP是一個(gè)TCP的傳輸協(xié)議(方式),它是一個(gè)可靠的安全協(xié)議
實(shí)現(xiàn)Socket服務(wù)端監(jiān)聽(tīng)方法:
1.實(shí)現(xiàn)Socket的監(jiān)聽(tīng)方法就是使用C語(yǔ)言實(shí)現(xiàn)(系統(tǒng)默認(rèn)就有,但是麻煩)
2.使用CocoaAsyncSocket第三方框(是oc的),內(nèi)部是對(duì)C的封裝,耗時(shí)操作肯定是耗時(shí)的砾层。
3.Telnet命令 telnet host port/telnet 192.168.10.10 5288 telnet命令是連接服務(wù)器上的某個(gè)端口對(duì)應(yīng)的服務(wù)
Socket層上的協(xié)議:
1.Socket層上的協(xié)議指的是數(shù)據(jù)傳輸格式:
2:HTTP協(xié)議(類似于字典的協(xié)議)
3:XMPP協(xié)議(是一款即時(shí)通訊協(xié)議(目的是定義數(shù)據(jù)傳輸?shù)母袷?)
4:自定義即時(shí)通訊協(xié)議,json格式
補(bǔ)充:TCP漩绵、UDP贱案、HTTP肛炮、Socket之間的區(qū)別
IP:網(wǎng)絡(luò)層協(xié)議;
TCP和UDP:傳輸層協(xié)議;
HTTP:應(yīng)用層協(xié)議;
Socket:TCP/IP網(wǎng)絡(luò)的API。多指?jìng)鬏攲泳W(wǎng)絡(luò)接口
TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議宝踪。
TCP和UDP使用IP協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò)侨糟。把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口瘩燥。TCP和UDP是高速公路上的“卡車”秕重,它們攜帶的貨物就是像HTTP,文件傳輸協(xié)議FTP這樣的協(xié)議等厉膀。
TCP和UDP是FTP溶耘,HTTP和SMTP之類使用的傳輸層協(xié)議。雖然TCP和UDP都是用來(lái)傳輸其他協(xié)議的服鹅,它們卻有一個(gè)顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸凳兵,而UDP不提供。這意味著TCP有一個(gè)特殊的機(jī)制來(lái)確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn)企软,而UDP不提供任何這樣的保證庐扫。
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議。客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器形庭,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端铅辞。
記住,需要IP協(xié)議來(lái)連接網(wǎng)絡(luò);TCP是一種允許我們安全傳輸數(shù)據(jù)的機(jī)制萨醒,斟珊,使用TCP協(xié)議來(lái)傳輸數(shù)據(jù)的HTTP是Web服務(wù)器和客戶端使用的特殊協(xié)議。
Socket 接口是TCP/IP網(wǎng)絡(luò)的API富纸,Socket接口定義了許多函數(shù)或例程倍宾,用以開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。
**XMPP:是一個(gè)應(yīng)用層協(xié)議,協(xié)議基于XML結(jié)構(gòu)設(shè)計(jì)