基本TCP套接字程式設計

2021-08-10 23:42:51 字數 1154 閱讀 1137

經過最近一段時間的系統學習,對於傳輸協議中tcp協議的套接字程式設計以及11中狀態轉化有了一定的認識,現在做出

以下總結:

上圖是幾乎所有教科書上關於tcp客戶端/伺服器通訊過程中api函式的彙總。

首先看伺服器端

1:服務端以被動連線的方式參與通訊,因此首先呼叫socket(int family,int type,int protocol)函式,其目的是在服務端建立乙個socket檔案描述符,該檔案描述符同時也是該伺服器的監聽套接字描述符。其三個引數的含義分別為協議族,位元組流,0。

2:服務端建立socket檔案描述符之後,緊接著呼叫bind(int sockfd,const struct sockaddr *myaddr,socklen_t addrlen)函式,其目的是初始化上一步中建立的socket,具體是指定sockaddr指標中的位址族,ip位址,埠。

3:在bind函式之後,伺服器呼叫listen(int sockfd,int backlog)函式,主要作用是讓核心為監聽套接字描述符建立兩個佇列,乙個為半連線佇列,乙個是全連線佇列,此時伺服器才能處於監聽狀態,同時可以對客戶端的連線做出響應,在listen之前,客戶端以任何形式傳送的資料都將被丟棄。

4:處於監聽狀態之後伺服器可以選擇接受客戶端的連線,accept(int sockfd,struct sockaddr *cliaddr

,socklen_t addrlen)函式,主要目的是為了返回乙個已連線套接字描述符。同時三次握手完成,一條全連線建立。注意:乙個伺服器只有乙個監聽套接字,但是可以有多個已連線套接字。同時提醒上圖的錯誤,在伺服器處於監聽狀態之後,任何客戶端就可以向伺服器發起主動連線請求,同時該鏈結進入在listen()中建立的半連線佇列,等accept()之後,即可進入全連線佇列。

5:接下來就是迴圈read()與

write(),直到客戶端主動關閉,或者因伺服器異常被動關閉連線。

接著看客戶端:與伺服器端相比,客戶端在tcp連線中的工作就少了很多,這也是為什麼伺服器的效能要比我們個人pc強大那麼多的乙個原因。

1:因為通訊的實質就是兩個套接字之間的通訊,因此客戶端第一步就是建立自己的socket(),與伺服器中的socket一樣,不在贅述。

個人水平有限,望各位海涵勿噴!

基本TCP套接字程式設計

基本tcp客戶 伺服器程式的套接字函式 返回 若成功則為非負描述符,若則為 1 其中family引數指明協議族,為某個常值。該引數也往往稱為協議域。family 說明af inet ipv4協議 af inet6 ipv6協議 af local unix域協議 af route 路由套接字 af k...

基本TCP套接字程式設計

tcp客戶與伺服器程序之間典型事件時間表 socket函式 includeint socket int family,int type,int protocol family引數執行協議族,該引數也往往被稱為協議域。是以下某個常值 type引數指明套接字型別,是以下某個常值 protocol引數應設...

基本TCP套接字程式設計

基本tcp套接字程式設計 connect函式 includeint connect int sockfd,const struct sockaddr servaddr,socklen t addrlen 返回 若成功則為0,若出錯則為 1 客戶端呼叫connect前不必非得呼叫bind函式,因為核心...