深入了解Socket
開(kāi)始本文之前肄梨,我首先提出以下幾個(gè)問(wèn)題:
- 什么是TCP/IP键科、UDP闻丑?
- Socket是什么?
什么是TCP/IP勋颖、UDP嗦嗡?
TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個(gè)工業(yè)標(biāo)準(zhǔn)的協(xié)議集饭玲,它是為廣域網(wǎng)(WANs)設(shè)計(jì)的酸钦。
UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議咱枉。它是屬于TCP/IP協(xié)議族中的一種卑硫。
這里有一張圖,表明了這些協(xié)議的關(guān)系蚕断。
TCP/IP協(xié)議族包括運(yùn)輸層欢伏、網(wǎng)絡(luò)層、鏈路層∫谌椋現(xiàn)在你知道TCP/IP與UDP的關(guān)系了吧硝拧。
Socket在哪里呢?
在上圖中葛假,我們沒(méi)有看到Socket的影子障陶,那么它到底在哪里呢?還是用圖來(lái)說(shuō)話聊训,一目了然抱究。
原來(lái)Socket在這里。
Socket是什么呢带斑?
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層鼓寺,它是一組接口勋拟。在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門面模式妈候,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面敢靡,對(duì)用戶來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部苦银,讓Socket去組織數(shù)據(jù)啸胧,以符合指定的協(xié)議。
你會(huì)使用它們嗎幔虏?
前人已經(jīng)給我們做了好多的事了吓揪,網(wǎng)絡(luò)間的通信也就簡(jiǎn)單了許多,但畢竟還是有挺多工作要做的所计。以前聽(tīng)到Socket編程柠辞,覺(jué)得它是比較高深的編程知識(shí),但是只要弄清Socket編程的工作原理主胧,神秘的面紗也就揭開(kāi)了叭首。
一個(gè)生活中的場(chǎng)景。你要打電話給一個(gè)朋友踪栋,先撥號(hào)焙格,朋友聽(tīng)到電話鈴聲后提起電話,這時(shí)你和你的朋友就建立起了連接夷都,就可以講話了眷唉。等交流結(jié)束,掛斷電話結(jié)束此次交談囤官。 生活中的場(chǎng)景就解釋了這工作原理冬阳,也許TCP/IP協(xié)議族就是誕生于生活中,這也不一定党饮。
先從服務(wù)器端說(shuō)起肝陪。服務(wù)器端先初始化Socket,然后與端口綁定(bind)刑顺,對(duì)端口進(jìn)行監(jiān)聽(tīng)(listen)氯窍,調(diào)用accept阻塞,等待客戶端連接蹲堂。在這時(shí)如果有個(gè)客戶端初始化一個(gè)Socket狼讨,然后連接服務(wù)器(connect),如果連接成功柒竞,這時(shí)客戶端與服務(wù)器端的連接就建立了政供。客戶端發(fā)送數(shù)據(jù)請(qǐng)求,服務(wù)器端接收請(qǐng)求并處理請(qǐng)求鲫骗,然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端,客戶端讀取數(shù)據(jù)踩晶,最后關(guān)閉連接执泰,一次交互結(jié)束。