TCP的socket的服务器端和客户端实例(linux下)

╰+攻爆jí腚メ 2022-01-26 14:57 362阅读 0赞

TCP的socket的服务器端和客户端实例:

1、服务器端步骤:

socket()->bind()->listen()->accept()->read()->write()->close()

2、客户端步骤:

socket()->connect()->write()->read()->close()

服务器端代码:

  1. #include <sys/socket.h>
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <arpa/inet.h>
  5. #include <netinet/in.h>
  6. #include <errno.h>
  7. #include <strings.h>
  8. #include <ctype.h>
  9. char host_name[20];
  10. int port = 8000;
  11. int main()
  12. {
  13. struct sockaddr_in sin,pin;
  14. int sock_descriptor,temp_sock_descriptor,address_size;
  15. int i , len , on=1;
  16. char buf[16384];
  17. sock_descriptor = socket(AF_INET,SOCK_STREAM,0);
  18. bzero(&sin,sizeof(sin));
  19. sin.sin_family = AF_INET;
  20. sin.sin_addr.s_addr = INADDR_ANY;
  21. sin.sin_port = htons(port);
  22. if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof(sin)) == -1)
  23. {
  24. perror("call to bind");
  25. exit(1);
  26. }
  27. if(listen(sock_descriptor,100) == -1)
  28. {
  29. perror("call to listem");
  30. exit(1);
  31. }
  32. printf("Accpting connections...\n");
  33. while(1)
  34. {
  35. address_size = sizeof(pin);
  36. temp_sock_descriptor = accept(sock_descriptor,(struct sockaddr *)&pin,&address_size);
  37. if(temp_sock_descriptor == -1)
  38. {
  39. perror("call to accept");
  40. exit(1);
  41. }
  42. if(recv(temp_sock_descriptor,buf,16384,0) == -1)
  43. {
  44. perror("call to recv");
  45. exit(1);
  46. }
  47. inet_ntop(AF_INET,&pin.sin_addr,host_name,sizeof(host_name));
  48. printf("received from client(%s):%s\n",host_name,buf);
  49. len = strlen(buf);
  50. for(i = 0 ; i < len ; i++)
  51. {
  52. buf[i] = toupper(buf[i]);
  53. }
  54. if(send(temp_sock_descriptor,buf,len+1,0) == -1)
  55. {
  56. perror("call to send");
  57. exit(1);
  58. }
  59. close(temp_sock_descriptor);
  60. }
  61. }

客户端代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <unistd.h>
  7. #include <arpa/inet.h>
  8. #include <netinet/in.h>
  9. #include <errno.h>
  10. #include <strings.h>
  11. #include <ctype.h>
  12. char * host_name = "127.0.0.1";
  13. int port = 8000;
  14. int main(int argc , char * argv[])
  15. {
  16. char buf[8192];
  17. //char message[256];
  18. int socket_descriptor;
  19. struct sockaddr_in pin;
  20. char * str ="A default test string";
  21. if(argc < 2)
  22. {
  23. printf("we will send a default test string.\n");
  24. }
  25. else
  26. {
  27. str = argv[1];
  28. if(argc == 3)
  29. {
  30. host_name = argv[2];
  31. }
  32. }
  33. bzero(&pin,sizeof(pin));
  34. pin.sin_family = AF_INET;
  35. inet_pton(AF_INET,host_name,&pin.sin_addr);
  36. pin.sin_port = htons(port);
  37. if((socket_descriptor = socket(AF_INET,SOCK_STREAM,0)) == -1)
  38. {
  39. perror("error opening socket \n");
  40. exit(1);
  41. }
  42. if(connect(socket_descriptor,(struct sockaddr * )&pin,sizeof(pin)) == -1)
  43. {
  44. perror("error connecting to socket \n");
  45. exit(1);
  46. }
  47. printf("sending message %s to server ..\n",str);
  48. if( write(socket_descriptor,str,strlen(str)+1) == -1 )
  49. {
  50. perror("error in send \n");
  51. exit(1);
  52. }
  53. printf("..sent message ...wait for message..\n");
  54. if( read(socket_descriptor,buf,8192) == -1 )
  55. {
  56. perror("error in receiving response from server \n");
  57. exit(1);
  58. }
  59. printf("\nResponse from server:\n\n%s\n",buf);
  60. close(socket_descriptor);
  61. return 1;
  62. }

运行结果:

服务器端:

  1. [root@rac2 ~]# ./server_iter
  2. Accpting connections...
  3. received from client(127.0.0.1):A default test string
  4. received from client(127.0.0.1):yang

客户端:

  1. [root@rac2 ~]# ./client_iter
  2. we will send a default test string.
  3. sending message A default test string to server ..
  4. ..sent message ...wait for message..
  5. Response from server:
  6. A DEFAULT TEST STRING
  7. [root@rac2 ~]# ./client_iter yang 127.0.0.1
  8. sending message yang to server ..
  9. ..sent message ...wait for message..
  10. Response from server:
  11. YANG
  12. [root@rac2 ~]#

发表评论

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

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

相关阅读

    相关 MFCSOCKETTCP客户

    前几篇博客介绍了一些TCP/IP、本地修改IP等相关知识,这篇博客进入正题,介绍socket编程的知识。 都是一些入门的知识,老鸟直接飞过就好。 android端