0
点赞
收藏
分享

微信扫一扫

多进程利用TCP进行信息群发功能

/服务器的代码
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>

 #define SEVER_IP "192.168.11.224"
 #define PORT_NUM 1111
 typedef struct sockaddr SA;
 typedef struct sockaddr_in SIN; 


 int main(int argc,char *argv[])
 {
     int sockfd;
     SIN seraddr = {0};
     int ret,ret1,ret2;
     int res,res1,res2;
     int reuse = 1;

     int clifd1,clifd2; 
     bzero(&seraddr,sizeof(SIN));
     seraddr.sin_family = AF_INET;
     seraddr.sin_port = htons(PORT_NUM);
     seraddr.sin_addr.s_addr = inet_addr(SEVER_IP);
     sockfd = socket(AF_INET,SOCK_STREAM,0);
     if(sockfd == -1)
     {
         printf("socketfd error\r\n");
         exit(0);
     }
     printf("sockfd = %d\r\n",sockfd);
     
     setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
     ret=bind(sockfd,(SA *)&seraddr,sizeof(SA));
     if(ret == -1)
     {
         printf("failed\r\n");
         exit(0);
     }

     printf("ret = %d\r\n",ret);
     ret1 = listen(sockfd,5);
     if(ret1 == 0)
     {
          printf("listen success\r\n");
     }
     SIN cliaddr = {0};


     socklen_t addrlen;

    clifd1 = accept(sockfd,(SA *)&cliaddr,&addrlen);//accept函数是有阻塞功能
 printf("clifd1 = %d\r\n",clifd1);
 clifd2 = accept(sockfd,(SA *)&cliaddr,&addrlen);//accept函数是有阻塞功能
 printf("clifd2 = %d\r\n",clifd2);
 if(clifd1 == -1)
 {
 perror("accept failed\r\n");
 exit(0);
 }
 if(clifd2 == -1)
 {
 perror("accept failed\r\n");
 exit(0);
 }
     res = fork();
     while(1)
     {

         if(res == 0)
         { 
             while(1)
             {
                 char r_buf[20] = {0};
                 recv(clifd1,r_buf,sizeof(r_buf),0);
                 send(clifd2,r_buf,sizeof(r_buf),0);
             }  

         }
         else
         {

             while(1)
             {
                 char t_buf[20] = {0};
                 recv(clifd2,t_buf,sizeof(t_buf),0);
                 send(clifd1,t_buf,sizeof(t_buf),0);

             }

         }
         

     }

     close(sockfd);
     close(clifd1);
     close(clifd2);


     
     return 0;
 }
 ================================================
 //客户端的代码
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>


 #define SEVER_IP "192.168.11.224"
 #define PORT_NUM 1111
 typedef struct sockaddr SA;
 typedef struct sockaddr_in SIN; 


 int main(int argc,char *argv[])
 {
     int serfd;
     int clidfd;
     SIN seraddr = {0};
     int ret,ret1,ret2;
     
     int rec_len = 0;
     bzero(&seraddr,sizeof(SIN));
     serfd = socket(AF_INET,SOCK_STREAM,0);
     if(serfd == -1)
     {
         perror("socket failed\r\n");
         exit(0);
     }
     printf("%d\r\n",serfd);
     bzero(&seraddr,sizeof(SIN));
     seraddr.sin_family = AF_INET;
     seraddr.sin_port = htons(PORT_NUM);
     seraddr.sin_addr.s_addr = inet_addr(SEVER_IP);
     serfd = socket(AF_INET,SOCK_STREAM,0);
     ret = connect(serfd,(SA *)&seraddr,sizeof(SA));
     if(ret == -1)
     {
         perror("connect failed\r\n");
     exit(0);

     }
     printf("connect success\r\n");
     
     
     int res;
     res = fork();
     if(res == 0)
     {
         char t_buf[20] = {0};
         while(1)
         {
             scanf("%s",t_buf);
             send(serfd,t_buf,sizeof(t_buf),0);
         }
     }
     else
     {
         char r_buf[20] = {0};

         while(1)
         {
             recv(serfd,r_buf,sizeof(r_buf),0);

             printf("A:%s\r\n",r_buf);
         }


     }
     close(serfd);    
     return 0;
 }

多进程利用TCP进行信息群发功能_算法

 

举报

相关推荐

0 条评论