基本的套接字程式設計

2021-09-01 03:49:29 字數 1318 閱讀 8960

以下標頭檔案都是#include

1.socket函式:指定期望的通訊協議型別

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

返回值叫做套接字描述符,socket descriptor,一般簡稱sockfd,失敗返回-1,成功返回非負值

family:指明協議族,一般:af_inet(ip protocol family,ipv4)

type:一般是sock_stream(位元組流套接字,也可以是資料報套字sock_dgram等)

protocol:一般設為0,也可以使用ipproto_tcp等

2.connect函式:客戶端用此與server來建立tcp連線,失敗返回-1,成功返回0

int connect (int sockfd,const struct sockaddr* servaddr,socklen_t addrlen);

sockfd:套接字描述符

servaddr和addrlen是乙個指向套接字位址結構的指標與該結構的大小.

3.bind函式:把乙個本地協議位址賦予乙個套接字,失敗返回-1,成功返回0

int bind(int sockfd,const const struct sockaddr* servaddr,socklen_t addrlen);

看起來引數與connect一樣哦!

4.listen函式:僅由tcp伺服器呼叫,當socket函式建立乙個套接字時,它被假設為乙個主動套接字,也就是說,它是乙個將呼叫connect發起連線的客戶套接字.listen函式把乙個未連線的套接字換成乙個被動套接字,指示核心應該接受指向該套接字的連線請求.失敗返回-1,成功返回0

backlog:核心應該為相應套接字排除的最大連線數,以下2種之和要小於backlog

4.1未完成連線佇列:已由某個客戶發出並到達伺服器,而伺服器正在等待完成相應的tcp三路握手過程.這些套接字處於syn_rcvd狀態.

4.2已完成連線佇列:每個已完成tcp三路握手過程的客戶對應其中一項.這些套接字處理established狀態.

5.accept函式:由tcp伺服器呼叫,用於從已完成佇列隊頭返回下乙個已完成連線.如果已完成連線隊列為空,那麼程序被投入睡眠.失敗返回-1,成功返回非負

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

如果對後面2個引數不感興趣,則置為空.

6.fork函式:呼叫一次,返回兩次,有點麻煩,以後再看!

7.close函式:關閉套接字,終止tcp連線

int close(int sockfd);失敗返回-1,成功返回0

基本UDP套接字程式設計

udp函式呼叫為 客戶不與伺服器建立連線,而是只管使用sendto函式給伺服器傳送資料報,其中必須指定目的地的位址為引數。類似地,伺服器不接受來客戶的連線,而是只管呼叫recvfrom函式,等待來自某個客戶的資料到達,recvfrom將與所接收的資料一道返回客戶的協議位址,因此可以把響應傳送給正確的...

基本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...