Linux网络协议.之 tcp,udp,socket网络编程(三).之多进程实现并发demon
创始人
2024-11-05 03:10:22

一、fork创建进程,来实现多并发
这只是个demon,并不能用于实际项目,多进程,消耗太多资源。没有人这么玩

1、服务端代码:

#include  #include  #include  #include  #include  #include  #include  #include    int main(int argc,char **argv) {         int s_fd;         int c_fd;         int n_read;         char readBuf[128];           char msg[128] = {0};         struct sockaddr_in s_addr;         struct sockaddr_in c_addr;           if(argc != 3)         {                 printf("param is not good\n");                 exit(-1);         }           memset(&s_addr,0,sizeof(struct sockaddr_in));         memset(&c_addr,0,sizeof(struct sockaddr_in)); 		         //1.socket         s_fd = socket(AF_INET,SOCK_STREAM,0);         if(s_fd == -1)         {                 perror("socket");                 exit(-1);         }           s_addr.sin_family = AF_INET;         s_addr.sin_port = htons(atoi(argv[2]));         inet_aton(argv[1],&s_addr.sin_addr);           //2.bind         bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));           //3.listen          listen(s_fd,10);           //4.accept         int clen = sizeof(struct sockaddr_in);         while(1)         {                 c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);//父进程负责accept                 if(c_fd == -1)                 {                         perror("accept");                 }                 printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));                   if(fork() == 0)//创建一个子进程,来实现读写功能,父进程负责accept                 {                         if(fork() == 0)//创建一个子进程的子进程,来实现写功能                         {                                 while(1)                                 {                                         memset(msg,0,sizeof(msg));                                         printf("input:");                                         fgets(msg,sizeof(msg),stdin);                                         write(c_fd,msg,strlen(msg));                                 }                         }                           //5.read                         while(1)//子进程父进程,来实现读功能                         {                                 memset(readBuf,0,sizeof(readBuf));                                 n_read = read(c_fd,readBuf,128);                                 if(n_read == -1)                                 {                                         perror("read");                                 }                                 else                                 {                                         printf("get message:%d,%s\n",n_read,readBuf);                                 }                         }                         break;                 }         }         return 0; } 

2、客户端代码:

#include  #include  #include  #include  #include  #include  #include  #include    int main(int argc,char **argv) {         int c_fd;         int n_read;         char readBuf[128];   //      char *msg = "msg form client";         char msg[128] = {0};         struct sockaddr_in c_addr;           memset(&c_addr,0,sizeof(struct sockaddr_in));           if(argc != 3)         {                 printf("parm is not good\n");                 exit(-1);         }         //1.socket         c_fd = socket(AF_INET,SOCK_STREAM,0);         if(c_fd == -1)         {                 perror("socket");                 exit(-1);         }           c_addr.sin_family = AF_INET;         c_addr.sin_port = htons(atoi(argv[2]));         inet_aton(argv[1],&c_addr.sin_addr);           //2.connect         if(connect(c_fd,(struct sockaddr *)&c_addr,sizeof(struct sockaddr)) == -1)         {                 perror("connect");                 exit(-1);         }                if(fork() == 0)//创建一个子进程,来实现写功能         {                 while(1)                 {                         memset(msg,0,sizeof(msg));                         printf("input:");                         fgets(msg,sizeof(msg),stdin);                         write(c_fd,msg,strlen(msg));                 }         }         while(1)//父进程进程,来实现读功能         {                 memset(readBuf,0,sizeof(readBuf));                 n_read = read(c_fd,readBuf,128);                 if(n_read == -1)                 {                         perror("read");                 }                 else                 {                         printf("get message form server:%d,%s\n",n_read,readBuf);                 }         }                   return 0; }        

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...