更新時(shí)間:2021-12-01 來(lái)源:黑馬程序員 瀏覽量:
學(xué)習(xí)Socket之前首先需要了解一下TCP/IP協(xié)議,TCP/IP協(xié)議是TCP和IP協(xié)議的合稱,TCP(Transfer Control Protocol,傳輸控制協(xié)議)是一種穩(wěn)定可靠的傳送方式,TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題,一有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡貫橹?。而IP是給互聯(lián)網(wǎng)的每一臺(tái)聯(lián)網(wǎng)設(shè)備規(guī)定一個(gè)地址。
TCP/IP協(xié)議包含因特網(wǎng)整個(gè)TCP/IP協(xié)議簇。在應(yīng)用層面的包括TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet 協(xié)議等。
Socket的英文原義是“孔”或“插座”。在程序方面,可理解為接口對(duì)象,在網(wǎng)絡(luò)編程中通常也稱作“套接字”,常用于描述IP地址和端口等。Socket是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看作是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),簡(jiǎn)單地說(shuō)就是通信兩方的一種約定。作為一個(gè)抽象的概念,簡(jiǎn)單理解,Socket就是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API)。
Socket中包含了進(jìn)行網(wǎng)絡(luò)通信必需的5種信息:連接使用的協(xié)議、客戶端設(shè)備的IP地址、客戶端的端口號(hào)、服務(wù)器端的IP地址、服務(wù)器端口。
Socket需要使用套接字地址來(lái)開(kāi)展工作,套接字地址就是IP地址和端口號(hào)的組合,套接字服務(wù)與其他網(wǎng)絡(luò)服務(wù)不同,不需要處理網(wǎng)絡(luò)中的GET或POST請(qǐng)求,而是采用點(diǎn)對(duì)點(diǎn)傳輸數(shù)據(jù)方式,是一個(gè)輕量級(jí)的網(wǎng)絡(luò)通信解決方案。在套接字服務(wù)中,服務(wù)器用監(jiān)聽(tīng)連接,客戶端用來(lái)打開(kāi)一個(gè)到服務(wù)器的連接,服務(wù)器和客戶端都需要一個(gè)唯一的IP地址和端口號(hào)組合。
下面通過(guò)一幅圖來(lái)演示Socket的簡(jiǎn)單模型,如圖6-3所示。
圖6-3 Socket簡(jiǎn)單模型
在圖6-3中,客戶端設(shè)備首先通過(guò)瀏覽器訪問(wèn)服務(wù)器設(shè)備,并且將自己的IP地址和端口號(hào)192.16.43.27:500放入瀏覽器的Socket對(duì)象中,當(dāng)服務(wù)器軟件需要向客戶端返回?cái)?shù)據(jù)時(shí),首先從Socket對(duì)象中取出客戶端的IP地址和端口號(hào),再發(fā)送數(shù)據(jù),由此可以看出,Socket可以理解為一個(gè)封裝了IP地址和端口號(hào)的接口對(duì)象而已。