Socket 編程
Socket (套接字):本質是編程接口(API),是對 TCP/IP 協議的封裝
套接字上聯應用進程,下聯網絡協議棧,是應用程序通過網絡協議進行通信的接口,是應用程序與網絡協議根進行交互的接口
一、編程流程
注:要通過互聯網進行通信,至少需要一對套接字,其中一個運行於客戶端,我們稱之為 Client Socket
,另一個運行於服務器端,我們稱之為 Server Socket
-
1.服務器監聽
所謂服務器監聽,是指服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態 。
-
2.客戶端請求
所謂客戶端請求,是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端接字提出連接請求 。
-
3.連接確認
所謂連接確認,是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求,就會響應客戶端套接字的請求,建立一個新的線程,並把服務器端套接字的描述 發送給客戶端。一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,接收其他客戶端套接字的連接請求 。
二、主要類型
-
1.流式套接字(SOCK_STREAM)
流式套接字用於提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復送,並按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在於其使用了傳輸控制協議,即
TCP(The Transmission Control Protocol)協議
。 -
2.數據報套接字(SOCK_DGRAM)
數據報套接字提供一種無連接的服務。該服務並不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重復,且無法保證順序地接收到數據。數據報套接字使用
UDP( User DatagramProtocol)協議
進行數據的傳輸。由於數據報套接字不能保證數據傳輸的可靠性,對於有可能出現的數據丟失情況,需要在程序中做相應的處理。
三、主要特點
根據套接字的不同類型,可以將套接字調用分為面向連接服務和無連接服務 。
面向連接服務的主要特點如下:
-
(1)數據傳輸過程必須經過建立連接、維護連接和釋放連接3個階段;
-
(2)在傳輸過程中,各分組不需要攜帶目的主機的地址;
-
(3)可靠性好,但由於協議復雜,通信效率不高 。
面向無連接服務的主要特點如下:
-
(1)不需要連接的各個階段;
-
(2)每個分組都攜帶完整的目的主機地址,在系統中獨立傳送;
-
(3)由於沒有順序控制,所以接收方的分組可能出現亂序、重復和丟失現象;
-
(4)通信效率高,但可靠性不能確保 。
四、表示方法
- 套接字Socket =(IP地址:端口號),套接字的表示方法是點分十進制的lP地址后面寫上端口號,中間用冒號或逗號隔開。
- 每一個傳輸層連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。
- 例如:如果IP地址是210.37.145.1,而端口號是23,那么得到套接字就是(210.37.145.1:23) 。