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