UDP和TCP處于同一層網(wǎng)絡(luò)模型中,也就是運(yùn)輸層,基于二者之上的應(yīng)用有很多,常見的基于TCP的有HTTP、Telnet等,基于UDP有DNS、NFS、SNMP等。UDP是無連接,不可靠的數(shù)據(jù)協(xié)議服務(wù),而TCP提供面向流、提供可靠數(shù)據(jù)服務(wù)。注意,UDP和TCP沒有好壞之分,只是二者的適用場景不同罷了。
典型的UDP套接字編程模型是客戶端不予服務(wù)端建立連接,而只是調(diào)用sendto函數(shù)來向服務(wù)端發(fā)送數(shù)據(jù),其中必須要指定服務(wù)端的信息,包括IP和端口等;服務(wù)端不接收來自客戶端的連接,而只是調(diào)用recvfrom函數(shù),來等待某個(gè)客戶端的數(shù)據(jù)到達(dá)。
UDP編程模型
在UDP套接字中,有2個(gè)函數(shù)最常用,也就是sendto和recvfrom,二者的聲明如下:
#include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); ssize_t sendto(int sockfd, void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t addrlen);
recvfrom和snedto的前3個(gè)參數(shù)和read/write的前3個(gè)參數(shù)一樣。flags表示設(shè)置的標(biāo)志值,簡單的UDP程序可以直接設(shè)置為0,最后兩個(gè)參數(shù)表示服務(wù)端地址(對于sendto來說)或者是對端地址(對于recvfrom來說)。如果不關(guān)心對端的地址,則設(shè)置為NULL,此時(shí)addrlen也可以設(shè)置為NULL了。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26