c語言網絡編程過程及函數說明


//TODO:

TCP、UDP在OSI(Open System Interconnect)網絡模型中處於傳輸層協議

IP在OSI網絡模型屬於網絡層

常用網絡函數:

socket函數
創建套接字、確定套接字的參數
int socket(int domain, int type, int protocol);
參數
domain:  地址簇,常用的為IPv4 AF_INET和IPv6 AF_INET6
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函數創建的套接字
*addr:  服務器本地的IP、端口、地址簇等信息
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: 客戶端創建用於與服務器端通信的套接字
addr:   指定的服務器參數包括傳輸格式、地址、端口號等信息
addrlen:服務器參數結構體的大小
返回值
成功 0 失敗 -1
select函數
檢測多個套接字的變化狀態來做響應處理
int select(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.網絡負擔非常重,但對響應速度要求高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM