当前位置: 首页 > news >正文

Linux网络协议.之 tcp,udp,socket网络编程(三).之多进程实现并发demon

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

1、服务端代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>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.sockets_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.bindbind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));//3.listen listen(s_fd,10);//4.acceptint clen = sizeof(struct sockaddr_in);while(1){c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);//父进程负责acceptif(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.readwhile(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 <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>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.socketc_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.connectif(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;
}       

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 通过java.netHttpURLConnection类实现java发送http请求
  • 【拓扑排序topsort】——启动!!!
  • 高清无水印视频素材哪里找?分享几个热门的高清无水印素材网站
  • html语法
  • mysql源码编译启动debug
  • 东方博宜24年8月-C组 - 屋顶
  • C++ | Leetcode C++题解之第328题奇偶链表
  • unity草体渲染方案 GPU Instaning
  • 数据结构(学习)2024.8.6
  • 数据库原理之多表查询——使用Mysql进行内连接和外连接
  • 【学习方法】高效学习因素 ② ( 学习动机 | 内在学习动机 | 外在学习动机 | 外在学习动机的调整方向 | 保护学习兴趣 | 高考竞争分析 )
  • 使用MailKit在.NET Core中收发邮件的完整示例
  • 『 Linux 』线程池与 POSIX 线程的封装编码实现
  • 无人机PX4飞控 | 电源系统详解与相关代码
  • Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现
  • HTTP请求重发
  • JS实现简单的MVC模式开发小游戏
  • Swift 中的尾递归和蹦床
  • 高程读书笔记 第六章 面向对象程序设计
  • 想使用 MongoDB ,你应该了解这8个方面!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器如何修改远程端口?
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​queue --- 一个同步的队列类​
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #VERDI# 关于如何查看FSM状态机的方法
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (2.2w字)前端单元测试之Jest详解篇
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十七)Flink 容错机制
  • (转)Sublime Text3配置Lua运行环境
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)Linux 多线程条件变量同步
  • .NET Core中的去虚
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET连接MongoDB数据库实例教程
  • .NET上SQLite的连接
  • [ Linux ] Linux信号概述 信号的产生
  • [ solr入门 ] - 利用solrJ进行检索
  • [000-01-022].第06节:RabbitMQ中的交换机介绍
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解
  • [Android] Implementation vs API dependency
  • [bzoj1912]异象石(set)