Socket通信是一種在網絡中進行進程間通信的機制。它使用了一種稱為套接字(Socket)的編程接口,通過該接口可以創建、連接、發送和接收數據等操作。
Socket通信中,有兩個主要的角色:服務器和客戶端。服務器負責監聽指定的端口,等待客戶端的連接請求;而客戶端則主動發起連接請求,與服務器建立連接。
創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),
? 網絡7層協議架構圖
? 1. socket則是對TCP/IP協議的封裝和應用
科普|OSI七層網絡協議 - 知乎
Socket通信中的Tcp協議三次握手(建立連接)和四次揮手(斷開連接)是建立和斷開連接的過程。
-
三次握手:建立連接過程
- 客戶端調用
socket()
函數創建一個套接字,并調用connect()
函數向服務器發起連接請求。 - 服務器端調用
socket()
函數創建一個套接字,并調用bind()
函數綁定IP地址和端口號,然后調用listen()
函數監聽連接請求。 - 客戶端發送一個SYN(同步數據包)包給服務器,表示請求建立連接。
- 服務器收到SYN包后,發送一個SYN-ACK(同步-確認)數據包)包給客戶端,表示同意建立連接。
- 客戶端收到SYN-ACK包后,發送一個ACK(確認數據包)包給服務器,表示連接建立成功。
- 客戶端調用
-
四次揮手:關閉連接過程
- 客戶端調用
close()
函數關閉連接。 - 客戶端發送一個FIN包(結束數據包)給服務器,表示要關閉連接。
- 服務器收到FIN包后,發送一個ACK包給客戶端,表示收到了關閉請求。
- 服務器調用
close()
函數關閉連接。 - 服務器發送一個FIN包給客戶端,表示服務器也要關閉連接。
- 客戶端收到FIN包后,發送一個ACK包給服務器,表示收到了關閉請求。
- 客戶端調用
socket實現通信在應用層面(代碼層面)大致需要完成以下幾個步驟:
服務器端:
第一步:建立一個用于通信的Socket對象
第二步:使用bind綁定IP地址和端口號
第三步:使用listen監聽客戶端
第四步:使用accept中斷程序直到連接上客戶端
第五步:接收來自客戶端的請求
第六步:返回客戶端需要的數據
第七步:如果接收到客戶端已關閉連接信息就關閉服務器端
客戶端:
第一步:建立一個用于通信的Socket對象
第二步:根據指定的IP和端口connet服務器
第三步:連接成功后向服務器端發送數據請求
第四步:接收服務器返回的請求數據
第五步:如果還需要請求數據繼續發送請求
第六步:如果不需要請求數據就關閉客戶端并給服務器發送關閉連接信息
1.Socket通信案例:
配置啟動項目?
服務器程序
客戶端程序
案例2:socket控制拍照功能