後另一個新的消息就會替換它。UDP廣泛用在多媒體應用中,例如,ProgressiveNetworks公司開發的RealAudio軟件,它是在因特網上把預先錄製的或者現場音樂實時傳送給客戶機的一種軟件,該軟件使用的RealAudioaudio-on-demandprotocol協議就是運行在UDP之上的協議,大多數因特網電話軟件產品也都運行在UDP之上。
化學中的UDP
UDP=uridinediphosphate,尿苷二磷酸,一種嘧啶核苷酸,由堿基、尿嘧啶與核糖組成,主要用途是RNA合成(轉錄)時的原料。另外UDP也是DTP能量消耗後產物,功能類似ADP,但較ADP少見。參與微生物肽聚糖等的合成。
UDPvsTCP
UDP
UDP和TCP協議的主要區別是兩者在如何實現信息的可靠傳遞方麵不同。
UDPTCP協議中包含了專門的傳遞保證
機製,當數據接收方收到發送方傳來的信息時,會自動向發送方發出確認消息;發送方隻有在接收到該確認消息之後才繼續傳送其它信息,否則將一直等待直到收到確認信息為止。與TCP不同,UDP協議並不提供數據傳送的保證機製。如果在從發送方到接收方的傳遞過程中出現數據報的丟失,協議本身並不能做出任何檢測或提示。因此,通常人們把UDP協議稱為不可靠的傳輸協議。
相對於TCP協議,UDP協議的另外一個不同之處在於如何接收突發性的多個數據報。不同於TCP,UDP並不能確保數據的發送和接收順序。例如,一個位於客戶端的應用程序向服務器發出了以下4個數據報
D1
D22
D333
D4444
但是UDP有可能按照以下順序將所接收的數據提交到服務端的應用:
D333
D1
D4444
D22
事實上,UDP協議的這種亂序性基本上很少出現,通常隻會在網絡非常擁擠的情況下才有可能發生。
UDP協議的應用
既然UDP是一種不可靠的網絡協議,那麼還有什麼使用價值或必要呢?其實不然,在有些情況下UDP協議可能會變得非常有用。因為UDP具有TCP所望塵莫及的速度優勢。雖然TCP協議中植入了各種安全保障功能,但是在實際執行的過程中會占用大量的係統開銷,無疑使速度受到嚴重的影響。反觀UDP由於排除了信息可靠傳遞機製,將安全和排序等功能移交給上層應用來完成,極大降低了執行時間,使速度得到了保證。
關於UDP協議的最早規範是RFC768,1980年發布。儘管時間已經很長,但是UDP協議仍然繼續在主流應用中發揮著作用。包括視頻電話會議係統在內的許多應用都證明了UDP協議的存在價值。因為相對於可靠性來說,這些應用更加注重實際性能,所以為了獲得更好的使用效果(例如,更高的畫麵幀刷新速率)往往可以犧牲一定的可靠性(例如,畫麵質量)。這就是UDP和TCP兩種協議的權衡之處。根據不同的環境和特點,兩種傳輸協議都將在今後的網絡世界中發揮更加重要的作用。
UDP程序設計
UDPServer程序
1、編寫UDPServer程序的步驟
(1)使用socket()來建立一個UDPsocket,第二個參數為SOCK_DGRAM。
(2)初始化sockaddr_in結構的變量,並賦值。sockaddr_in結構定義:
【𝗼𝗼𝗽.𝘁𝘄 無錯章節】
structsockaddr_in{
uint8_tsin_len;
sa_family_tsin_family;
in_port_tsin_port;
structin_addrsin_addr;
charsin_zero[8];
};
這裡使用“08”作為服務程序的端口,使用“INADDR_ANY”作為綁定的IP地址即任何主機上的地址。
(3)使用bind()把上麵的socket和定義的IP地址和端口綁定。這裡檢查bind()是否執行成功,如果有錯誤就退出。這樣可以防止服務程序重複運行的問題。
(4)進入無限循環程序,使用recvfrom()進入等待狀態,直到接收到客戶程序發送的數據,就處理收到的數據,並向客戶程序發送反饋。這裡是直接把收到的數據發回給客戶程序。
2、udpserv.c程序內容
#include
#include
#include
#include
#include
edulcni#
08ENILXAMenifed#
8888TROP_VRESenifed#
)nelilct_nelkcos,rddailcp*rddakcostcurts,dfkcostni(ohce_oddiov
;ntni
;nelt_nelkcos
;]ENILXAM[gsemrahc
);;(rof
;nelilc=nel
/\*atadeviecerrofgnitiaw*/\
;)nel&,rddailcp,0,ENILXAM,gsem,dfkcos(morfvcer=n
/\*tneilcotkcabatadtnes*/\
;)nel,rddailcp,0,n,gsem,dfkcos(otdnes
)diov(niamtni
;dfkcostni
;rddailc,rddavresni_rddakcostcurts
/\*tekcosaetaerc*/\;)0,MARGD_KCOS,TENI_FA(tekcos=dfkcos
/\*rddavrestini*/\
;))rddavres(foezis,rddavres&(orezb
;TENI_FA=ylimaf_nis.rddavres
vres