Socket本質(zhì)是網(wǎng)絡通信編程接口(API)贴唇,平時我們用到的high-level網(wǎng)絡編程底層實現(xiàn)其實就是Socket搀绣。它面向的是兩個傳輸層協(xié)議的編程,分別是UDP和TCP戳气,UDP是不可靠傳輸協(xié)議(比如TFTP链患、TFTP、SNMP)瓶您,TCP是可靠傳輸協(xié)議(比如HTTP麻捻、FTP纲仍、Telnet)。 這里不作贅述贸毕,有興趣的可以查資料了解郑叠,推薦找網(wǎng)絡原理的書看。
Chart
socket connect
通信過程
首先服務端需要在某個端口上發(fā)起監(jiān)聽(listen
)明棍, 客戶端需要知道服務端的IP
和Port
(端口號)乡革,接著向服務端發(fā)起socket連接請求。在
發(fā)起連接的時候摊腋,客戶端也會帶上本地的Port和IP沸版,一般由系統(tǒng)去做這個事情。
客戶端向服務器發(fā)起socket連接
如果沒有出現(xiàn)問題的話兴蒸,服務器接受(accept
)客戶端的請求视粮。之后同樣創(chuàng)建一個socket套接字,綁定(bind
)到本地的端口橙凳,并設置它遠程端點(client
)的IP
和Port
蕾殴。服務器會繼續(xù)創(chuàng)建一個新的socket來監(jiān)聽(listen
)客戶端的請求。
服務端創(chuàng)建socket連接
在客戶端岛啸,當一個連接被接受(accept
)時区宇,socket就創(chuàng)建成功了,客戶端使用這個socket和服務器進行數(shù)據(jù)傳輸值戳。
服務端和客戶端通過write or read
來進行通信议谷。
socket連接是兩個應用在網(wǎng)絡中溝通的橋梁,socket綁定的端口號用來標識數(shù)據(jù)是被發(fā)送到指定的應用的堕虹。