天天看點

了解套接字Socket

Socket

在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的接口供應用層調用以實作程序在網絡中通信。

需要記住的知識點:

  • 監聽的 Socket 和真正用來傳資料的 Socket 是兩個,一個叫作監聽 Socket,一個叫作已連接配接 Socket。
  •  TCP 和 UDP 的 Socket 的程式設計中,用戶端和服務端都需要調用哪些函數

基于 TCP 協定的 Socket 程式函數調用過程(Socket通信流程)

socket是"打開—讀/寫—關閉"模式的實作,以使用TCP協定通訊的socket為例,其互動流程大概是這樣子的

伺服器根據位址類型(ipv4,ipv6)、socket類型、協定建立socket

伺服器為socket綁定ip位址和端口号

伺服器socket監聽端口号請求,随時準備接收用戶端發來的連接配接,這時候伺服器的socket并沒有被打開

用戶端建立socket

用戶端打開socket,根據伺服器ip位址和端口号試圖連接配接伺服器socket

伺服器socket接收到用戶端socket請求,被動打開,開始接收用戶端請求,直到用戶端傳回連接配接資訊。這時候socket進入阻塞狀态,所謂阻塞即accept()方法一直到用戶端傳回連接配接資訊後才傳回,開始接收下一個用戶端諒解請求

用戶端連接配接成功,向伺服器發送連接配接狀态資訊

伺服器accept方法傳回,連接配接成功

用戶端向socket寫入資訊

伺服器讀取資訊

用戶端關閉

伺服器端關閉

基于 UDP 協定的 Socket 程式函數調用過程

對于 UDP 來講,過程有些不一樣。UDP 是沒有連接配接的,是以不需要三次握手,也就不需要調用 listen 和 connect,但是,UDP 的的互動仍然需要 IP 和端口号,因而也需要 bind。

UDP 是沒有維護連接配接狀态的,因而不需要每對連接配接建立一組 Socket,而是隻要有一個 Socket,就能夠和多個用戶端通信。也正是因為沒有連接配接狀态,每次通信的時候,都調用 sendto 和 recvfrom,都可以傳入 IP 位址和端口。

比較TCP和UDP的特點:

TCP UDP
全稱 傳輸控制協定 使用者資料報協定(無連接配接)
穩定 比較穩定 不太穩定
速度
建立連接配接 必須建立連接配接 無需建立連接配接
使用場景 浏覽器;web開發 QQ;直播;DNS