电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1679 人浏览分享

linux c语言socket编程实例1server-1client(服务器端代码)

[复制链接]
1679 0

服务器端代码:

  1. /**************************************************
  2. ##filename      : server.c
  3. ##author        : GYZ                              
  4. ##e-mail        : 1746902011@qq.com               
  5. ##create time   : 2018-07-23 10:41:42
  6. ##last modified : 2018-07-26 13:27:19
  7. ##description   : NA                              
  8. **************************************************/

  9. #include <stdio.h>                                
  10. #include <stdlib.h>                                
  11. #include <string.h>                                
  12. #include <sys/socket.h>                                                   
  13. #include <sys/types.h>
  14. #include <unistd.h>
  15. #include <netinet/in.h>
  16. #include <netinet/ip.h>
  17. #include <arpa/inet.h>
  18. #include <errno.h>
  19. #include <pthread.h>

  20. void pthread_func(int*);

  21. int main(int argc,char *argv[])                    
  22. {                                                  
  23.     int server_sockfd;
  24.     int client_sockfd;
  25.     int ret;
  26.     struct sockaddr_in server_addr;
  27.     struct sockaddr_in client_addr;
  28.     socklen_t server_addrlen;
  29.     socklen_t client_addrlen;
  30.     int on = 1;

  31.     /*1,create a socket*/
  32.     /*IPPROTO=0,dumserver protocol for TCP*/
  33.     server_sockfd = socket(AF_INET,SOCK_STREAM,0);
  34.     if(-1 == server_sockfd)
  35.     {
  36.         perror("socket"),exit(-1);
  37.     }
  38.     /*1.5 enable address reuse*/
  39.     ret = setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
  40.     /*2,bind the socket with an ip*/
  41.     memset(&server_addr,0,sizeof(struct sockaddr_in));
  42.     server_addr.sin_family = AF_INET;
  43.     server_addr.sin_port = htons(3490);
  44.     server_addr.sin_addr.s_addr = inet_addr("172.23.7.179");
  45.     server_addrlen = sizeof(struct sockaddr);
  46.     ret = bind(server_sockfd,(const struct sockaddr*)&server_addr,server_addrlen);
  47.     if(-1 == ret)
  48.     {
  49.         perror("bind"),exit(-1);
  50.     }
  51.     /*3,listen the socket*/
  52.     ret = listen(server_sockfd,6);
  53.     if(-1 == ret)
  54.     {
  55.         perror("listen"),exit(-1);
  56.     }
  57.     while(1)
  58.     {
  59.         /*4,accept the data from the client*/
  60.         client_addrlen = sizeof(struct sockaddr);
  61.         client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_addr,&client_addrlen);
  62.         if(client_sockfd > 0)
  63.         {   
  64.             printf("IP is %s\n",inet_ntoa(client_addr.sin_addr));
  65.             printf("Port is %d\n",ntohs(client_addr.sin_port));
  66.             pthread_t pt;
  67.             printf("%d\n",client_sockfd);
  68.             ret = pthread_create(&pt,NULL,(void *)pthread_func,&client_sockfd);
  69.             if(0 != ret)
  70.             {
  71.                 printf("ip:%s connect failed",inet_ntoa(client_addr.sin_addr));
  72.             }
  73.         }
  74.     }
  75.     close(server_sockfd);
  76.     return 0;                                      
  77. }                                                  
  78. void pthread_func(int* p_client_sockfd)            
  79. {
  80.     int client_sockfd = *p_client_sockfd;
  81.     printf("%d\n",client_sockfd);
  82.     int ret;
  83.     char data[100];
  84.     char data1[100];
  85.     while(1)
  86.     {
  87.         /*5,read the data from client*/
  88.         ret = recv(client_sockfd,data,100,0);
  89.         if(-1 == ret)
  90.         {
  91.             perror("recv"),exit(-1);
  92.         }
  93.         printf("data from client:%s\n",data);
  94.         /*6,send the data to client*/
  95.         printf("server send data:");
  96.         scanf("%s",data1);
  97.         ret = send(client_sockfd,data1,100,0);
  98.         if(-1 == ret)
  99.         {
  100.             perror("send"),exit(-1);
  101.         }                                                  
  102.     }
  103.     close(client_sockfd);
  104. }
  105. 客户端代码:

  106. /**************************************************
  107. ##filename      : client.c
  108. ##author        : GYZ                              
  109. ##e-mail        : 1746902011@qq.com               
  110. ##create time   : 2018-07-23 16:36:34
  111. ##last modified : 2018-07-26 13:14:36
  112. ##description   : NA                              
  113. **************************************************/

  114. /#include <stdio.h>                                
  115. #include <stdlib.h>                                
  116. #include <string.h>                                
  117. #include <sys/socket.h>                                                   
  118. #include <sys/types.h>
  119. #include <unistd.h>
  120. #include <netinet/in.h>
  121. #include <netinet/ip.h>
  122. #include <arpa/inet.h>
  123. #include <errno.h>
  124. #include <pthread.h>

  125. int main(int argc,char *argv[])                    
  126. {                                                  
  127.     int client_sockfd;
  128.     struct sockaddr_in client_addr;
  129.     socklen_t client_addrlen;
  130.     char data[20];
  131.     char data1[20];
  132.     int ret;

  133.     /*1,create a socket*/
  134.     client_sockfd = socket(AF_INET,SOCK_STREAM,0);
  135.     if(-1 == client_sockfd)
  136.     {
  137.         perror("socket"),exit(-1);
  138.     }
  139.     /*2,connect to the server*/
  140.     memset(&client_addr,0,sizeof(struct sockaddr));
  141.     client_addr.sin_family = AF_INET;
  142.     client_addr.sin_port = htons(3490);
  143.     client_addr.sin_addr.s_addr = inet_addr("172.23.7.179");
  144.     client_addrlen = sizeof(struct sockaddr);
  145.     ret = connect(client_sockfd,(const struct sockaddr *)&client_addr,client_addrlen);
  146.     if(-1 == ret)
  147.     {
  148.         perror("connect"),exit(-1);
  149.     }
  150.     while(1)
  151.     {
  152.         /*3,send the data to server*/
  153.         printf("client data are :");
  154.         scanf("%s",data);
  155.         ret = send(client_sockfd,data,20,0);
  156.         if(-1 == ret)
  157.         {
  158.             perror("write"),exit(-1);
  159.         }
  160.         /*4,receive the data from server*/
  161.         ret = recv(client_sockfd,data1,100,0);
  162.         if(-1 == ret)
  163.         {
  164.             perror("recv"),exit(-1);
  165.         }
  166.         printf("data from server:%s\n",data1);
  167.     }
  168.     close(client_sockfd);
  169.     return 0;                                      
  170. }                                                  
  171.                                                    

  172. makefile文件:

  173. all:server client

  174. CC = gcc
  175. SRC1 = server.c
  176. SRC2 = client.c
  177. OBJE1 = server
  178. OBJE2 = client

  179. ${OBJE1}:
  180.     ${CC} ${SRC1} -o ${OBJE1} -pthread
  181. ${OBJE2}:
  182.     ${CC} ${SRC2} -o ${OBJE2} -pthread

  183. .PHONY:clean
  184. clean :
  185.     rm ${OBJE1} ${OBJE2}
复制代码




您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.