//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...