当前位置:   article > 正文

TCP服务端_在线tcp服务器

在线tcp服务器
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. typedef struct sockaddr* SP;
  10. void server(int cli_fd)
  11. {
  12. char buf[4096] ={};
  13. size_t buf_size = sizeof(buf);
  14. for(;;)
  15. {
  16. //接收请求
  17. int ret = read(cli_fd,buf,buf_size);
  18. if(0 >= ret || 0 == strcmp(buf,"quit"))
  19. {
  20. printf("客户端%d 退出\n",cli_fd);
  21. break;
  22. }
  23. printf("from %d recv: %s bits:%d\n",cli_fd,buf,ret);
  24. //响应请求
  25. strcat(buf,":return");
  26. ret = write(cli_fd,buf,strlen(buf)+1);
  27. if(0 >= ret)
  28. {
  29. printf("客户端%d 退出\n",cli_fd);
  30. break;
  31. }
  32. }
  33. //关闭cli_socket
  34. close(cli_fd);
  35. }
  36. int main()
  37. {
  38. //创建socket
  39. int sockfd = socket(AF_INET,SOCK_STREAM,0);
  40. if(0 > sockfd)
  41. {
  42. perror("socket");
  43. return EXIT_FAILURE;
  44. }
  45. //准备通信地址
  46. struct sockaddr_in addr = {};
  47. addr.sin_family = AF_INET;
  48. addr.sin_port = htons(6666);
  49. addr.sin_addr.s_addr = inet_addr("172.16.3.102");//服务端绑定本机ip
  50. socklen_t addrlen = sizeof(addr);
  51. //绑定
  52. if(bind(sockfd,(SP)&addr,addrlen))
  53. {
  54. perror("bind");
  55. return EXIT_FAILURE;
  56. }
  57. //监听
  58. if(listen(sockfd,5))
  59. {
  60. perror("listen");
  61. return EXIT_FAILURE;
  62. }
  63. for(;;)
  64. {
  65. struct sockaddr_in cli_addr = {};
  66. //等待连接
  67. int cli_fd = accept(sockfd,(SP)&cli_addr,&addrlen);
  68. if(0 > cli_fd)
  69. {
  70. perror("accept");
  71. continue;
  72. }
  73. //创建进程服务
  74. if(0 == fork())
  75. {
  76. server(cli_fd);
  77. }
  78. }
  79. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/886199
推荐阅读
相关标签
  

闽ICP备14008679号