網絡編程 UDP套接字

第十二章 UDP套接字

12.1 前言

上一章講述了TCP通訊方式,它是基於流的面向鏈接的網絡通訊。UDP是IP協議上的另外一種傳輸協議。網絡

TCP和UDP都是端到端的通訊協議,都處於TCP/IP網絡模型的第三層(傳輸層)。socket

它和TCP的區別是:函數

TCP UDP 解釋
基於流 基於報文  
有鏈接 無鏈接  
有保障 無保障  
效率低 效率高  
適用穩定傳輸場合 適合容許報文丟失的場合  

12.2 建立UDP socket

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

12.2 綁定地址

綁定地址和TCP同樣spa

12.3 發送和接收

調用的接口和TCP不同,行爲不一樣。TCP的發送會發生粘包狀況,而UDP不會。TCP發送認爲是可靠的,而UDP的發送可能會發生丟失和亂序。接口

UDP的發送大部分時候使用sendto,由於send函數沒有提供目標地址。若是UDP socket調用了connect函數,也可使用send函數。table

12.4 廣播和多播(組播)

因爲UDP沒有鏈接,因此能夠支持廣播和多播。class

12.5 關閉socket

使用close效率

注意:

  • UDP也能夠調用connect函數,可是connect函數只是讓udp socket保存默認的發送地址,以即可以簡單的調用send函數來發送數據。udp

  • UDP的數據是基於報文的,客戶端調用一次send,產生一個UDP報文,接收一次只能接收一個報文。程序

  • 若是recv時,程序提供的緩衝區小於UDP報文長度,那麼會致使數據丟失。如何獲得數據報文的長度???UDP報文不要超過MTU(1400)

  • 廣播時,發送端作額外設置,容許發送廣播,接收端仍是默認處理接口。容許發送廣播socket,也能夠接收數據。

  • 組播,發送端不須要額外設置,只須要發送地址改爲組播地址便可。接收端加入組。

相關文章
相關標籤/搜索