偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

UDP協(xié)議服務(wù)應(yīng)用源碼分享

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
文章中,我們對(duì)UDP協(xié)議的一類應(yīng)用進(jìn)行了分析。首先我們闡述了UDP程序設(shè)計(jì)的一些簡(jiǎn)單步驟,并且分享了一篇UDP Server程序的源碼。

我們知道,UDP協(xié)議被規(guī)定為不可靠的協(xié)議。盡管如此,在一些應(yīng)用中,UDP協(xié)議也比TCP協(xié)議有著巨大的優(yōu)勢(shì)。下面我們就來(lái)討論下有關(guān)內(nèi)容吧。UDP是一種不可靠的網(wǎng)絡(luò)協(xié)議,那么還有什么使用價(jià)值或必要呢?其實(shí)不然,在有些情況下UDP協(xié)議可能會(huì)變得非常有用。因?yàn)閁DP具有TCP所望塵莫及的速度優(yōu)勢(shì)。雖然TCP協(xié)議中植入了各種安全保障功能,但是在實(shí)際執(zhí)行的過(guò)程中會(huì)占用大量的系統(tǒng)開(kāi)銷,無(wú)疑使速度受到嚴(yán)重的影響。反觀UDP由于排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來(lái)完成,極大降低了執(zhí)行時(shí)間,使速度得到了保證。

關(guān)于UDP協(xié)議的最早規(guī)范是RFC768,1980年發(fā)布。盡管時(shí)間已經(jīng)很長(zhǎng),但是UDP協(xié)議仍然繼續(xù)在主流應(yīng)用中發(fā)揮著作用。包括視頻電話會(huì)議系統(tǒng)在內(nèi)的許多應(yīng)用都證明了UDP協(xié)議的存在價(jià)值。因?yàn)橄鄬?duì)于可靠性來(lái)說(shuō),這些應(yīng)用更加注重實(shí)際性能,所以為了獲得更好的使用效果(例如,更高的畫(huà)面幀刷新速率)往往可以犧牲一定的可靠性(例如,會(huì)面質(zhì)量)。這就是UDP和TCP兩種協(xié)議的權(quán)衡之處。根據(jù)不同的環(huán)境和特點(diǎn),兩種傳輸協(xié)議都將在今后的網(wǎng)絡(luò)世界中發(fā)揮更加重要的作用。

UDP Server程序

1、編寫(xiě)UDP Server程序的步驟

(1)使用socket()來(lái)建立一個(gè)UDP socket,第二個(gè)參數(shù)為SOCK_DGRAM。

(2)初始化sockaddr_in結(jié)構(gòu)的變量,并賦值。sockaddr_in結(jié)構(gòu)定義:

  1. struct sockaddr_in {  
  2. uint8_t sin_len;  
  3. sa_family_t sin_family;  
  4. in_port_t sin_port;  
  5. struct in_addr sin_addr;  
  6. char sin_zero[8];  
  7. }; 

這里使用“08”作為服務(wù)程序的端口,使用“INADDR_ANY”作為綁定的IP地址即任何主機(jī)上的地址。

(3)使用bind()把上面的socket和定義的IP地址和端口綁定。這里檢查bind()是否執(zhí)行成功,如果有錯(cuò)誤就退出。這樣可以防止服務(wù)程序重復(fù)運(yùn)行的問(wèn)題。

(4)進(jìn)入無(wú)限循環(huán)程序,使用recvfrom()進(jìn)入等待狀態(tài),直到接收到客戶程序發(fā)送的數(shù)據(jù),就處理收到的數(shù)據(jù),并向客戶程序發(fā)送反饋。這里是直接把收到的數(shù)據(jù)發(fā)回給客戶程序。

2、udpserv.c程序內(nèi)容:

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. #define MAXLINE 80  
  8. #define SERV_PORT 8888  
  9. void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)  
  10.  
  11. {  
  12. int n;  
  13. socklen_t len;  
  14. char mesg[MAXLINE];  
  15. for(;;)  
  16. {  
  17. len = clilen;/* waiting for receive data */ 
  18. n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);/* sent data back to client */ 
  19. sendto(sockfd, mesg, n, 0, pcliaddr, len);  
  20. }  
  21. }  
  22.  
  23. int main(void)  
  24. {  
  25. int sockfd;  
  26. struct sockaddr_in servaddr, cliaddr;  
  27. sockfd = socket(AF_INET, SOCK_DGRAM, 0); /* create a socket */ 
  28. /* init servaddr */ 
  29. bzero(&servaddr, sizeof(servaddr));  
  30. servaddr.sin_family = AF_INET;  
  31. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
  32. servaddr.sin_port = htons(SERV_PORT);  
  33. /* bind address and port to socket */ 
  34. if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1)  
  35. {  
  36. perror("bind error");  
  37. exit(1);  
  38. }  
  39. do_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));  
  40. return 0;  

到這里,我們對(duì)UDP協(xié)議的一些程序應(yīng)用進(jìn)行了簡(jiǎn)單的介紹,那么在后續(xù)的文章中,我們將會(huì)UDP Client程序內(nèi)容進(jìn)行一下分析。

責(zé)任編輯:佟健 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-07-06 15:16:34

UDP協(xié)議

2010-06-28 15:45:07

UDP協(xié)議

2010-07-07 11:17:01

UDP協(xié)議應(yīng)用

2010-07-06 15:46:41

UDP協(xié)議

2010-06-28 10:57:07

UDP協(xié)議

2010-07-07 11:02:26

TCP UDP協(xié)議服務(wù)

2010-07-08 14:35:32

UDP協(xié)議

2014-06-13 13:47:31

UDP

2010-07-08 13:06:34

UDP協(xié)議

2020-09-10 09:05:29

UDP服務(wù)器Nodejs

2010-07-12 15:40:24

2010-07-08 12:58:03

UDP協(xié)議

2010-07-12 14:41:35

UDP協(xié)議

2010-07-06 15:28:57

UDP協(xié)議基礎(chǔ)

2013-08-01 10:01:02

網(wǎng)絡(luò)協(xié)議TCP協(xié)議UDP協(xié)議

2019-09-16 08:33:50

TCP協(xié)議UDP

2010-07-12 21:14:09

UDP協(xié)議

2010-07-05 16:17:18

UDP協(xié)議

2020-01-03 07:57:39

UDPTCP網(wǎng)絡(luò)協(xié)議

2010-07-08 12:42:34

UDP協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)