c語言網路程式設計過程及函式說明

2022-07-28 12:39:31 字數 2607 閱讀 2170

//

todo:

tcp、udp在osi(open system interconnect)網路模型中處於傳輸層協議

ip在osi網路模型屬於網路層

常用網路函式:

socket函式

建立套接字、確定套接字的引數

int socket(int domain, int type, int

protocol);

引數type: 資料傳輸方式/套接字型別,常用的為 流格式(面向連線)sock_stream、資料報格式(面向無連線)sock_dgram

protocol:傳輸協議,常用的有 tcp傳輸協議 ipproto_tcp 和 udp傳輸協議 ipptoto_udp

返回值建立的套接字值

bind函式

伺服器端使用bind函式將套接字和本地ip、埠等資訊繫結(傳輸層和網路層互聯)

int bind(int sockfd, const

struct sockaddr *addr,socklen_t addrlen);

引數sockfd: socket函式建立的套接字

addrlen:伺服器資訊的結構體大小

返回值成功 0 失敗 -1

listen函式

伺服器繫結套接字和本地裝置資訊後,呼叫listen函式讓套接字進入被動監聽狀態

int listen(int sockfd, int backlog);

引數sockfd: 需要進入監聽的套接字

backlog:監聽客戶端請求佇列的最大個數,如果設定引數為somaxconn,則由系統自動決定

返回值成功 0 失敗 -1

accept函式

伺服器端阻塞接收客戶端socket上的資料流,做響應處理

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

引數sock: listen函式監聽到需要響應的套接字(服務端套接字)

addr: 客戶端的ip、埠號等資訊(客戶端資訊)

addrlen:客戶端資訊結構的大小

返回值返回乙個新的和客戶端通訊的套接字

connect函式

客戶端連線到指定伺服器的介面

int connect(int sockfd, const

struct sockaddr *addr,socklen_t addrlen);

引數sockfd: 客戶端建立用於與伺服器端通訊的套接字

addrlen:伺服器引數結構體的大小

返回值成功

0 失敗 -1

select函式

檢測多個套接字的變化狀態來做響應處理

intselect(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

引數nfds: 所監視的檔案描述符中最大的值+1

*readfds: 監測是否可讀的檔案描述符

*writefds: 監測是否可寫的檔案描述符

*exceptfds:監測是否有異常的檔案描述符

*timeout: 超時時間,如果為null,則阻塞等待直到前面的檔案描述符變化

返回值:

監測到變化的檔案描述符,如果因為超時而退出則返回值為0,如果異常 則為-1

1】tcp協議資料傳輸具有粘包性

2】tcp的三次握手發生在connect函式階段

3】udp的資料傳輸需要使用sendto和recvfrom函式,他們和send、recv區別是,前者不光包含套接字資訊,還包括目標位址資訊

tcp服務端程式設計

socket  > bind > listen > accept > read ...send...

socket  > bind > listen > select  > read ... send...

tcp客戶端程式設計

socket  > bind > connect > read ... send...

socket  > bind > connect > select > read ... send...

客戶端如果不呼叫bind函式,客戶端裝置會隨機分配乙個沒有使用的埠 

udp伺服器程式設計

socket > bind > recvfrom... sendto...

udp客戶端程式設計

socket  > recvfrom... sendto...

tcp與udp基本區別

1.基於連線與無連線

2.tcp要求系統資源較多,udp較少; 

3.udp程式結構較簡單 

4.流模式(tcp)與資料報模式(udp); 

5.tcp保證資料正確性,udp可能丟包 

6.tcp保證資料順序,udp不保證 

udp應用場景:

1.面向資料報方式

2.網路資料大多為短訊息 

3.擁有大量client

4.對資料安全性無特殊要求

5.網路負擔非常重,但對響應速度要求高

C 輸入函式說明

輸入原理 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候 當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入。cin 功...

MPI函式說明及示例

mpi函式說明 1 並行初始化函式 int mpi init int argc,char argv 引數描述 argc為變數數目,argv為變數陣列,兩個引數均來自main函式的引數 2 並行結束函式 int mpi finalize 例如 hello.c include mpich2 includ...

C語言 fopen 函式的引數說明

格式 檔案指標名 fopen 檔名,使用檔案方式 引數 檔名 意義 c temp temp.txt 檔案 c temp temp.txt 檔案使用方式 意 義 rt 唯讀開啟乙個文字檔案,只允許讀資料 wt 只寫開啟或建立乙個文字檔案,只允許寫資料 at 追加開啟乙個文字檔案,並在檔案末尾寫資料 r...