理解網路程式設計和套接字

2021-08-25 02:25:41 字數 2365 閱讀 6678

網路程式設計中接受連線請求的套接字的建立過程

1.呼叫socket函式建立套接字

2.呼叫bind函式分配ip位址和埠號

3.呼叫listen函式轉為可接收請求狀態

4.呼叫accept函式受理連線請求

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

函式socket()的引數domain用於設定網路通訊的域,函式socket()根據這個引數選擇通訊協議的族

ipv4一般用af_inet

type用於設定套接字通訊的型別,主要有socket_stream(流式套接字,tcp用),socket_dgram(資料報套接字,udp用)

protocol用於指定某個協議的特定型別,即type型別中的某個型別。通常某協議中只有一種特定的型別,這樣protocol

僅能設定為0,但是有些協議有多種特定的型別,就需要設定這個引數來選擇特定的型別

結構體struct sockaddr_in 

;struct in_addr

;sin_family 位址族協議

sin_port 埠號

sin_addr ip位址

sin_family指代協議族,在socket程式設計中只能是af_inet

sin_port儲存埠號(使用網路位元組順序),在linux下,埠號的範圍0~65535,同時0~1024範圍的埠號已經被系統使用或保留。

sin_addr儲存ip位址,使用in_addr這個資料結構

現在sockaddr退化了(void *)的作用,傳遞乙個位址給函式,至於這個函式是

sockaddr_in還是sockaddr_in6,由位址族確定,然後函式內部再強制型別轉化為所需的位址型別

inet_pton是乙個ip位址轉換函式,可以在將ip位址在「點分十進位制」和「二進位制整數」之間轉換

int inet_pton(int af, const char *src, void *dst);

這個函式轉換字串到網路位址,第乙個引數af是位址簇,第二個引數*src是**位址,第三個引數* dst接收轉換後的資料。

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

成功:返回乙個新建立的socket的檔案描述符,失敗:-1,並設定errno

htons()函式:htons是將整型變數從主機位元組順序轉變成網路位元組順序,(將乙個無符號短整型數值轉換為網路位元組序,即大端

模式(big-endian))

就是整數在位址空間儲存方式變為高位位元組存放在記憶體的低位址處。

inaddr_any這個巨集是數值型別

htonl()函式:將主機數轉換成無符號長整型的網路位元組順序。(將主機的無符號長整形數轉換成網路位元組順序。)

本函式將乙個32位數從主機位元組順序轉換成網路位元組順序。

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

成功:0 失敗:-1,並設定errno

sockfd:socket檔案描述符

addr:構造出ip位址加埠號

addrlen:sizeof(addr)長度

返回值:成功返回0,失敗返回-1,設定errno

int listen(int sockfd,int backlog);

sockfd:檔案描述符

backlog:排隊建立3次握手佇列和剛剛建立3次握手佇列的鏈結數和

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

sockfd:

socket檔案描述符

addr:

傳出引數,返回鏈結客戶端位址資訊,含ip位址和埠號

addrlen:

傳入傳出引數(值-結果),傳入sizeof(addr)大小,函式返回時返回真正接收到位址

結構體的大小

返回值:

成功返回乙個新的socket檔案描述符,用於和客戶端通訊,失敗-1,並設定errno

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

sockfd:

socket檔案描述符

addr:

傳入引數,指定伺服器端位址資訊,含ip位址和埠號

addrlen:

傳入引數,傳入sizeof(addr)大小

返回值成功:0,失敗:-1,並設定errno

bind(),accept(),connect()函式的第二個引數都需要強轉,前面加(struct sockaddr *)

atoi (表示 ascii to integer)是把字串轉換成整型數的乙個函式

理解網路程式設計和套接字

include include include include void error handling char message int main void void error handling char message 編譯測試 gcc low open.c o low open low ope...

1 1 理解網路程式設計和套接字

最近在看網路程式設計相關的知識,網上說尹聖雨的 tcpip網路程式設計 不錯,遂網上找了分電子版本的書籍,記錄下閱讀筆記。tcp套接字通訊可以模擬 機,接聽方流程如下 socket 安裝 機 bind 分配 號碼 listen 連線 線 accept 拿起話筒 打 端比較簡單,只需要 socket ...

一 理解網路程式設計和套接字

第一步 呼叫socket函式建立套接字 第三步 呼叫listen函式轉為可接收請求狀態 第四步 呼叫accept函式受理連線請求 include include include include include include void error handling char message int ...