1. 程式人生 > >什麼是套接字(Socket)

什麼是套接字(Socket)

應用層通過傳輸層進行資料通訊時,TCP和UDP會遇到同時為多個應用程式程序提供併發服務的問題。多個TCP連線或多個應用程式程序可能需要 通過同一個TCP協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與TCP/IP協議互動提供了稱為套接字 (Socket)的介面,區分不同應用程式程序間的網路通訊和連線。

生成套接字,主要有3個引數:通訊的目的IP地址、使用的傳輸 層協議(TCP或UDP)和使用的埠號。Socket原意是“插座”。通過將這3個引數結合起來,與一個“插座”Socket繫結,應用層就可以和傳輸 層通過套接字介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務。

Socket可以看成在兩個程式進行通訊連線中的一個端點,一個程式將一段資訊寫入Socket中,該Socket將這段資訊傳送給另外一個Socket中,使這段資訊能傳送到其他程式中。如圖1:

Host A上的程式A將一段資訊寫入Socket中,Socket的內容被Host A的網路管理軟體訪問,並將這段資訊通過Host A的網路介面卡傳送到Host B,Host B的網路介面卡接收到這段資訊後,傳送給Host B的網路管理軟體,網路管理軟體將這段資訊儲存在Host B的Socket中,然後程式B才能在Socket中閱讀這段資訊。

要通過網際網路進行通訊,至少需要一對套接字,一個運行於客戶機端,稱之為ClientSocket,另一個運行於伺服器端,稱之為serverSocket。     
根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。     
伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。

客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。

連 接確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客 戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。