UDP和TCP處于同一層網(wǎng)絡(luò)模型中,也就是運(yùn)輸層,基于二者之上的應(yīng)用有很多,常見(jiàn)的基于TCP的有HTTP、Telnet等,基于UDP有DNS、NFS、SNMP等。UDP是無(wú)連接,不可靠的數(shù)據(jù)協(xié)議服務(wù),而TCP提供面向流、提供可靠數(shù)據(jù)服務(wù)。注意,UDP和TCP沒(méi)有好壞之分,只是二者的適用場(chǎng)景不同罷了。

  典型的UDP套接字編程模型是客戶(hù)端不予服務(wù)端建立連接,而只是調(diào)用sendto函數(shù)來(lái)向服務(wù)端發(fā)送數(shù)據(jù),其中必須要指定服務(wù)端的信息,包括IP和端口等;服務(wù)端不接收來(lái)自客戶(hù)端的連接,而只是調(diào)用recvfrom函數(shù),來(lái)等待某個(gè)客戶(hù)端的數(shù)據(jù)到達(dá)。

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

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)志值,簡(jiǎn)單的UDP程序可以直接設(shè)置為0,最后兩個(gè)參數(shù)表示服務(wù)端地址(對(duì)于sendto來(lái)說(shuō))或者是對(duì)端地址(對(duì)于recvfrom來(lái)說(shuō))。如果不關(guān)心對(duì)端的地址,則設(shè)置為NULL,此時(shí)addrlen也可以設(shè)置為NULL了。

網(wǎng)友評(píng)論