作家
登录

UDPClient代码分享

作者: 来源: 2012-06-23 01:26:30 阅读 我要评论

前文,我们对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 IPaddressn", 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;  


  推荐阅读

  HART协议的智能应用

通过前面的基础介绍,我们都知道HART协议是一个在布线和总线方面有着广泛应用的协议。很多传输以及智能设备中都会涉及到这个协议的使用。我们今天先来简单介绍一下它适配器的设计。工控机&#65380;PC机目前无直接接入>>>详细阅读


本文标题:UDPClient代码分享

地址:http://www.17bianji.com/xieyi/7102.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)