当前位置:   article > 正文

网编 TCP的服务器客户端_在线tcp服务器

在线tcp服务器

1.TCP的服务器客户端

1)服务器

  1. #include <myhead.h>
  2. #define ERR_MSG(msg) do{\
  3. fprintf(stderr,"__%d__",__LINE__);\
  4. perror(msg);\
  5. }while(0)
  6. #define IP "192.168.10.102"
  7. int main(int argc, const char *argv[])
  8. {
  9. int sfd = socket(AF_INET,SOCK_STREAM,0);
  10. if(sfd < 0)
  11. {
  12. ERR_MSG("socket");
  13. return -1;
  14. }
  15. //允许端口快速被重用
  16. int reuse = 1;
  17. if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) <0)
  18. {
  19. ERR_MSG("setsockopt");
  20. return -1;
  21. }
  22. printf("允许端口快速被重用成功\n");
  23. struct sockaddr_in sin;
  24. sin.sin_family = AF_INET;
  25. sin.sin_port = htons(8888);
  26. sin.sin_addr.s_addr = inet_addr(IP);
  27. if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))<0)
  28. {
  29. ERR_MSG("bind");
  30. return -1;
  31. }
  32. printf("bind success\n");
  33. if(listen(sfd,128) < 0)
  34. {
  35. ERR_MSG("listen");
  36. return -1;
  37. }
  38. printf("listen success\n");
  39. struct sockaddr_in cin;
  40. socklen_t addrlen = sizeof(cin);
  41. int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
  42. if(newfd <0)
  43. {
  44. ERR_MSG("accept");
  45. return -1;
  46. }
  47. printf("[%s : %d] newfd = %d 客户端连接成功\n",\
  48. inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);
  49. char buf[128] = "";
  50. ssize_t res = 0;
  51. while(1)
  52. {
  53. bzero(buf,sizeof(buf));
  54. res = recv(newfd,buf,sizeof(buf),0);
  55. if(res < 0)
  56. {
  57. ERR_MSG("recv");
  58. return -1;
  59. }
  60. else if(0 == res)
  61. {
  62. printf("[%s ; %d] newfd = %d 客户端下线\n",\
  63. inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);
  64. break;
  65. }
  66. printf("[%s ; %d] newfd=%d ; %s\n",\
  67. inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,buf);
  68. strcat(buf,"Q_A_Q");
  69. if(send(newfd,buf,sizeof(buf),0)<0)
  70. {
  71. ERR_MSG("send");
  72. return -1;
  73. }
  74. printf("发送成功\n");
  75. }
  76. close(newfd);
  77. if(close(sfd)<0)
  78. {
  79. ERR_MSG("close");
  80. return -1;
  81. }
  82. return 0;
  83. }

2)客户端

  1. #include <myhead.h>
  2. #define ERR_MSG(msg) do { fprintf(stderr,"__%d__",__LINE__);perror(msg);}while(0)
  3. #define IP "192.168.10.102" //ifconfig查看本机IP
  4. #define PORT 8888
  5. int main(int argc, const char *argv[])
  6. {
  7. //printf("%d %s %s\n",__LINE,__func,__FILE__);
  8. //创建流式套接字
  9. int cfd = socket(AF_INET,SOCK_STREAM,0);
  10. if(cfd < 0)
  11. {
  12. ERR_MSG("socket");
  13. return -1;
  14. }
  15. int reuse = 1;
  16. if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) <0)
  17. {
  18. ERR_MSG("setsockopt");
  19. return -1;
  20. }
  21. printf("允许端口快速被重用成功\n");
  22. //填充服务器的地址信息结构体 AF_INET:man 7 ip
  23. //填充服务器的地址信息结构体,给connect函数使用
  24. //要连接哪个服务器,就填充哪个服务器绑定的地址信息
  25. struct sockaddr_in sin;
  26. sin.sin_family = AF_INET; //必须填AF_INET
  27. sin.sin_port = htons(PORT); //端口号的网络字节序,1024-49151
  28. sin.sin_addr.s_addr= inet_addr(IP); //本机IP的网络字节序
  29. if(connect(cfd,(struct sockaddr *)&sin,sizeof(sin))<0)
  30. {
  31. ERR_MSG("connect");
  32. return -1;
  33. }
  34. printf("connect success\n");
  35. char buf[128] = "";
  36. ssize_t res = 0;
  37. while(1)
  38. {
  39. bzero(buf,sizeof(buf));
  40. //发送数据
  41. printf("请输入:");
  42. fgets(buf,sizeof(buf),stdin);
  43. buf[strlen(buf)-1]=0;
  44. //对方接收多少个字节,发送多少个字节
  45. if(send(cfd,buf,sizeof(buf),0) <0)
  46. {
  47. ERR_MSG("send");
  48. return -1;
  49. }
  50. printf("发送成功\n");
  51. bzero(buf,sizeof(buf));
  52. //接收数据
  53. res = recv(cfd,buf,sizeof(buf),0);
  54. if(res < 0)
  55. {
  56. ERR_MSG("recv");
  57. return -1;
  58. }
  59. else if(0 == res)
  60. {
  61. printf("cfd = %d 服务器下线\n",cfd);
  62. break;
  63. }
  64. printf("cfd=%d : %s\n",cfd,buf);
  65. }
  66. //关闭文件描述符
  67. if(close(cfd)<0)
  68. {
  69. ERR_MSG("close");
  70. return -1;
  71. }
  72. return 0;
  73. }

运行结果:

2. 自行编写一个客户端代码,能够操作红色手臂移动到16度

  1. #include <myhead.h>
  2. #define ERR_MSG(msg) do { fprintf(stderr,"__%d__",__LINE__);perror(msg);}while(0)
  3. #define IP "192.168.10.135" //ifconfig查看本机IP
  4. #define PORT 8888
  5. int main(int argc, const char *argv[])
  6. {
  7. int cfd = socket(AF_INET,SOCK_STREAM,0);
  8. if(cfd < 0)
  9. {
  10. ERR_MSG("socket");
  11. return -1;
  12. }
  13. int reuse = 1;
  14. if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) <0)
  15. {
  16. ERR_MSG("setsockopt");
  17. return -1;
  18. }
  19. printf("允许端口快速被重用成功\n");
  20. struct sockaddr_in sin;
  21. sin.sin_family = AF_INET; //必须填AF_INET
  22. sin.sin_port = htons(PORT); //端口号的网络字节序,1024-49151
  23. sin.sin_addr.s_addr= inet_addr(IP); //本机IP的网络字节序
  24. if(connect(cfd,(struct sockaddr *)&sin,sizeof(sin))<0)
  25. {
  26. ERR_MSG("connect");
  27. return -1;
  28. }
  29. printf("connect success\n");
  30. char buf[5];
  31. while(1)
  32. {
  33. printf("请输入:");
  34. for(int i=0;i<5;i++)
  35. {
  36. scanf("%hhx",&buf[i]);
  37. }
  38. if((send(cfd,buf,sizeof(buf),0))<0)
  39. {
  40. ERR_MSG("send");
  41. return -1;
  42. }
  43. printf("发送成功\n");
  44. }
  45. //关闭文件描述符
  46. if(close(cfd)<0)
  47. {
  48. ERR_MSG("close");
  49. return -1;
  50. }
  51. return 0;
  52. }

 运行结果:

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/886243
推荐阅读
相关标签
  

闽ICP备14008679号