基本的TCP程式設計

2021-09-06 13:31:50 字數 1531 閱讀 5850

int socket(int family,int type,int protocol);

family:

af_inet ipv4協議

af_inet6 ipv6協議

af_local unix域協議

af_route 路由套介面

type:

sock_stream 位元組流套介面

sock_dgram 資料報套介面

sock_raw 原始套介面

返回乙個很小的非負整數,叫做套介面描述字,簡稱套接字sockfd

af_***位址族

pf_***協議族

connect()建立乙個tcp連線

三次握手出錯:

1 傳送無應答,6秒後再次傳送,無應答,24秒後再次傳送,若75秒鐘後仍未相應,則返回錯誤

2 硬錯:syn返回rst:syn到達埠,但沒有監聽程序、tcp想取消乙個已有的連線、tcp接受了乙個根本不存在的連線

3 軟錯:中間路由器產生目的地不可達的icmp錯誤

bind() 給套介面分配乙個本地協議位址

struct

sockaddr_in servaddr;

servaddr.sin_addr.s_addr = htol(inaddr_any);

標頭檔案定義的所有inaddr_常值都是主機位元組序,所以應該使用htol

**非通配ip位址的好處是:由核心將給定的目的ip位址解復用後送往伺服器程序

int listen(int sockfd,int backlog);

listen()僅被tcp伺服器使用:在呼叫socket bind之後,accept之前

1 將未連線的套介面轉換成被動套介面,指示核心應接受只想此套介面的連線請求。

2 函式第二個引數規定了,套介面排隊的最大連線個數

對於給定的監聽套介面,有兩個佇列:

1 未完成連線佇列 incomplete connection queue  syn_rcvd狀態

2 已完成連線佇列 complete connection queue established狀態

accept() tcp伺服器呼叫,從已完成的佇列頭返回下乙個已完成的連線。若完成隊列為空,則睡眠

int accept(int sockfd,struct sockaddr *cliaddr,socklen_t * addrlen);

addrlen是值-結果引數

fork()一次呼叫兩個返回值:

1 父程序呼叫返回的是子程序的id

2 子程序呼叫返回0

close()將套介面設定為已關閉標記,並立即返回到程序。

描述字訪問計數,用於設定父程序的訪問狀況。

基本的TCP程式設計

int socket int family,int type,int protocol family af inet ipv4協議 af inet6 ipv6協議 af local unix域協議 af route 路由套介面 type sock stream 位元組流套介面 sock dgram ...

基本TCP套接字程式設計

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

基本TCP套接字程式設計

經過最近一段時間的系統學習,對於傳輸協議中tcp協議的套接字程式設計以及11中狀態轉化有了一定的認識,現在做出 以下總結 上圖是幾乎所有教科書上關於tcp客戶端 伺服器通訊過程中api函式的彙總。首先看伺服器端 1 服務端以被動連線的方式參與通訊,因此首先呼叫socket int family,in...