成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

UDPClient代碼分享

網絡 網絡管理
文章中,我們來對UDPClient的相關源碼編寫進行了分析,那么具體的內容我們也做了解釋。希望對大家有用。

前文,我們對UDP Server的編寫過程進行了分析和介紹,并且也分享了源碼,不知道大家掌握的如何。這里我們繼續來對UDPClient程序進行一下分析,希望對大家有所幫助。

UDPClient程序

編寫UDPClient程序的步驟

(1)初始化sockaddr_in結構的變量,并賦值。這里使用“8888”作為連接的服務程序的端口,從命令行參數讀取IP地址,并且判斷IP地址是否符合要求。

(2)使用socket()來建立一個UDP socket,第二個參數為SOCK_DGRAM。

(3)使用connect()來建立與服務程序的連接。與TCP協議不同,UDP的connect()并沒有與服務程序三次握手。上面說了UDP是非連接的,實際上也可以是連接的。使用連接的UDP,kernel可以直接返回錯誤信息給用戶程序,從而避免由于沒有接收到數據而導致調用recvfrom()一直等待下去,看上去好像客戶程序沒有反應一樣。

(4)向服務程序發送數據,因為使用連接的UDP,所以使用write()來替代sendto()。這里的數據直接從標準輸入讀取用戶輸入。

(5)接收服務程序發回的數據,同樣使用read()來替代recvfrom()。

(6)處理接收到的數據,這里是直接輸出到標準輸出上。

udpclient.c程序內容:

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. #include  
  8. #include  
  9. #define MAXLINE 80  
  10. #define SERV_PORT 8888  
  11.  
  12. void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen)  
  13. {  
  14. int n;  
  15. char sendline[MAXLINE], recvline[MAXLINE + 1];  
  16. /* connect to server */ 
  17. if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1)  
  18. {  
  19. perror("connect error");  
  20. exit(1);  
  21. }  
  22. while(fgets(sendline, MAXLINE, fp) != NULL)  
  23. {  
  24. /* read a line and send to server */ 
  25. write(sockfd, sendline, strlen(sendline));  
  26. /* receive data from server */ 
  27. n = read(sockfd, recvline, MAXLINE);  
  28. if(n == -1)  
  29. {  
  30. perror("read error");  
  31. exit(1);  
  32. }  
  33. recvline[n] = 0; /* terminate string */ 
  34. fputs(recvline, stdout);  
  35. }  
  36. }  
  37. int main(int argc, char **argv)  
  38. {  
  39. int sockfd;  
  40. struct sockaddr_in srvaddr;  
  41. /* check args */ 
  42. if(argc != 2)  
  43. {  
  44. printf("usage: udpclient \n");  
  45. exit(1);  
  46. }  
  47. /* init servaddr */ 
  48. bzero(&servaddr, sizeof(servaddr));  
  49. servaddr.sin_family = AF_INET;  
  50. servaddr.sin_port = htons(SERV_PORT);  
  51. if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)  
  52. {  
  53. printf("[%s] is not a valid IPaddress\n", argv[1]);  
  54. exit(1);  
  55. }  
  56. sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
  57. do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));  
  58. return 0;  

 

責任編輯:佟健 來源: uml.org.cn
相關推薦

2010-07-07 11:09:36

UDPClient

2012-06-27 10:03:39

PHP

2009-12-18 17:01:37

Ruby基礎代碼

2009-12-17 09:49:18

Ruby代碼管理

2012-01-10 12:48:52

Java

2010-04-22 17:53:36

Apache負載均衡

2010-04-26 16:36:31

DNS負載均衡設置

2018-05-10 15:35:03

前端代碼圖像

2012-01-12 10:09:30

Java

2012-01-17 10:43:26

Java

2011-07-11 10:16:07

JavaScript

2012-01-11 09:39:50

Java

2015-07-21 15:35:47

代碼總結源碼

2010-05-28 12:55:23

2020-08-04 07:47:59

代碼模板模式

2011-07-18 16:48:02

Cocoa Objective-

2015-08-25 08:55:14

優秀代碼基因

2014-04-04 09:53:18

2048C++

2011-07-07 10:35:53

htaccess

2009-11-24 13:26:17

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品免费视频大全最热 | 五月天国产在线 | 久久精品视频在线观看 | 激情91| 国产在线观看av | 亚洲精品国产一区 | h片在线看| 精品一区二区三区免费视频 | 国产黄色在线观看 | 午夜爱爱毛片xxxx视频免费看 | 日日拍夜夜 | 色婷婷一区二区三区四区 | 日韩毛片视频 | 美女日批免费视频 | 国产欧美一区二区三区日本久久久 | 日韩一区二区在线播放 | 妞干网视频| 色综合久久天天综合网 | 日韩欧美在 | 亚洲一区二区三区视频 | 91精品久久久久久久久久入口 | www.国产91| 日本精品久久 | 天天色综| 九九热精品视频 | 中文字幕第一页在线 | 精品国产一区二区三区久久久蜜月 | 久久亚洲精品视频 | 成年人视频免费在线观看 | 日韩一区二区在线看 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 国产精品久久久久久久毛片 | 黄视频免费 | 久久精品国产免费看久久精品 | 日韩欧美国产一区二区三区 | 精品久久九 | 日本久久综合 | 在线看av网址 | 韩日一区二区 | 欧美中文字幕在线观看 | 日本在线视频中文字幕 |