网络编程 UDP套接字
第十二章 UDP套接字
12.1 前言
上一章講述了TCP通信方式,它是基于流的面向連接的網絡通信。UDP是IP協議上的另一種傳輸協議。
TCP和UDP都是端到端的通信協議,都處于TCP/IP網絡模型的第三層(傳輸層)。
它和TCP的區別是:
| 基于流 | 基于報文 | ? |
| 有連接 | 無連接 | ? |
| 有保障 | 無保障 | ? |
| 效率低 | 效率高 | ? |
| 適用穩定傳輸場合 | 適合允許報文丟失的場合 | ? |
12.2 創建UDP socket
int?sockfd?=?socket(AF_INET,?SOCK_DGRAM,?0);12.2 綁定地址
綁定地址和TCP一樣
12.3 發送和接收
調用的接口和TCP不一樣,行為不同。TCP的發送會發生粘包情況,而UDP不會。TCP發送認為是可靠的,而UDP的發送可能會發生丟失和亂序。
UDP的發送大部分時候使用sendto,因為send函數沒有提供目標地址。如果UDP socket調用了connect函數,也可以使用send函數。
12.4 廣播和多播(組播)
由于UDP沒有連接,所以可以支持廣播和多播。
12.5 關閉socket
使用close
注意:
-
UDP也可以調用connect函數,但是connect函數只是讓udp socket保存默認的發送地址,以便可以簡單的調用send函數來發送數據。
-
UDP的數據是基于報文的,客戶端調用一次send,產生一個UDP報文,接收一次只能接收一個報文。
-
如果recv時,程序提供的緩沖區小于UDP報文長度,那么會導致數據丟失。如何得到數據報文的長度???UDP報文不要超過MTU(1400)
-
廣播時,發送端做額外設置,允許發送廣播,接收端還是默認處理接口。允許發送廣播socket,也可以接收數據。
-
組播,發送端不需要額外設置,只需要發送地址改成組播地址即可。接收端加入組。
轉載于:https://www.cnblogs.com/w-x-me/p/6412735.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的网络编程 UDP套接字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xcode项目集成CocoaPods
- 下一篇: curl请求本地域名问题