UDP简单实现并发服务器和客户端简单通信

墨蓝 2022-07-14 09:40 316阅读 0赞

以下程序均未做错误处理,以后有时间一定补上

客户端

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <netinet/in.h>
  5. #include <sys/socket.h>
  6. int main(int argc,char **argv)
  7. {
  8. int sockfd;
  9. int n;
  10. struct sockaddr_in servaddr;
  11. char readbuf[1000];
  12. char sendbuf[1000];
  13. sockfd = socket(AF_INET,SOCK_DGRAM,0);
  14. bzero(&servaddr,sizeof(servaddr));
  15. servaddr.sin_family = AF_INET;
  16. servaddr.sin_addr.s_addr = inet_addr(argv[1]);
  17. servaddr.sin_port = htons(3200);
  18. while(fgets(sendbuf,1000,stdin) != NULL)
  19. {
  20. sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
  21. n = recvfrom(sockfd,readbuf,1000,0,NULL,NULL);
  22. readbuf[n] = '\0';
  23. fputs(readbuf,stdout);
  24. }
  25. close(sockfd);
  26. return 0;
  27. }

服务器

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <netinet/in.h>
  5. #include <sys/socket.h>
  6. void strlwr(char *str)
  7. {
  8. char *p;
  9. p = str;
  10. while(*p != '\0')
  11. {
  12. if((*p >= 'a') && (*p <= 'z'))
  13. {
  14. *p -= 32;
  15. }
  16. p++;
  17. }
  18. }
  19. int main()
  20. {
  21. int sockfd;
  22. int n;
  23. struct sockaddr_in servaddr,cliaddr;
  24. char mesg[1000];
  25. socklen_t clilen;
  26. sockfd = socket(AF_INET,SOCK_DGRAM,0);
  27. bzero(&servaddr,sizeof(servaddr));
  28. servaddr.sin_family = AF_INET;
  29. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  30. servaddr.sin_port = htons(3200);
  31. bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
  32. clilen = sizeof(cliaddr);
  33. for(;;)
  34. {
  35. for(;;)
  36. {
  37. n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr*)&cliaddr,&clilen);
  38. if(n == 0)
  39. {
  40. printf("client closed");
  41. exit(-1);
  42. }
  43. printf("******************\n");
  44. mesg[n] = '\0';
  45. printf("%s\n",mesg);
  46. printf("*******************\n");
  47. strlwr(mesg);
  48. sendto(sockfd,mesg,n,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
  49. }
  50. //close(sockfd);
  51. }
  52. close(sockfd);
  53. return 0;
  54. }



发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读