Linux编程基础 8.1:多进程并发服务器

多进程并发服务器
多线程并发服务器
I/O多路转接服务器
epoll的工作模式

1 多进程并发服务器

在多进程并发服务器中,若有用户请求到达,服务器将会调用fork()函数,创建一个子进程,之后父进程将继续调用accept(),而子进程则去处理用户请求。

【案例1】构建多进程并发服务器。

  • 服务器端:接收多个客户端的数据,并将接收到的数据转为大写,写回客户端;
  • 客户端:向服务器发送数据,并将服务器返回的数据打印到终端。
forkserver.c
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include "wrap.h"
#define MAXLINE 80						//缓冲数组大小
#define SERV_PORT 8000					//端口号
//子进程回收函数
void doSigChild(int paraNum) {while (waitpid(0, NULL, WNOHANG) > 0);
} //of doSigChild
int main() {struct sockaddr_in tempServAddr, tempCliAddr;socklen_t tempCliAddrLen;int tempListenFd, tempConnFd;char tempBuf[MAXLINE];char tempStr[INET_ADDRSTRLEN];int i, tempDataLen;pid_t tempPid;struct sigaction tempNewAct;tempNewAct.sa_handler = doSigChild;sigaction(SIGCHLD, &tempNewAct, NULL);		//信号捕获与处理(回收子进程)tempListenFd = Socket(AF_INET, SOCK_STREAM, 0);//设置服务器端口地址bzero(&tempServAddr, sizeof(tempServAddr));tempServAddr.sin_family = AF_INET;tempServAddr.sin_addr.s_addr = htonl(INADDR_ANY);tempServAddr.sin_port = htons(SERV_PORT);//使服务器与端口绑定Bind(tempListenFd, (struct sockaddr *)&tempServAddr, sizeof(tempServAddr));Listen(tempListenFd, 20);printf("Accepting connections ...\n");while (1) {tempCliAddrLen = sizeof(tempCliAddr);tempConnFd = Accept(tempListenFd, (struct sockaddr *)&tempCliAddr, &tempCliAddrLen);tempPid = fork();			//创建子进程if (tempPid == 0) {//子进程处理客户端请求Close(tempListenFd);while (1) {tempDataLen = Read(tempConnFd, tempBuf, MAXLINE);if (tempDataLen == 0) {printf("the other side has been closed.\n");break;}//of if//打印客户端端口信息printf("received from %s at PORT %d\n",inet_ntop(AF_INET, &tempCliAddr.sin_addr, tempStr, sizeof(tempStr)),ntohs(tempCliAddr.sin_port));for (i = 0; i < tempDataLen; i++) {tempBuf[i] = toupper(tempBuf[i]);} //of for iWrite(tempConnFd, tempBuf, tempDataLen);}//of whileClose(tempConnFd);return 0;} else if (tempPid > 0) {Close(tempConnFd);} else {perr_exit("fork");}//of if}//of whileClose(tempListenFd);return 0;
}//of mainforkclient.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include "wrap.h"
#define MAXLINE 80							//缓冲数组大小
#define SERV_PORT 8000						//端口号
int main() {struct sockaddr_in tempServAddr;char tempBuf[MAXLINE];int tempSockFd, tempDataLen;tempSockFd = Socket(AF_INET, SOCK_STREAM, 0);bzero(&tempServAddr, sizeof(tempServAddr));tempServAddr.sin_family = AF_INET;inet_pton(AF_INET, "127.0.0.1", &tempServAddr.sin_addr);tempServAddr.sin_port = htons(SERV_PORT);Connect(tempSockFd, (struct sockaddr *)&tempServAddr, sizeof(tempServAddr));while (fgets(tempBuf, MAXLINE, stdin) != NULL) {Write(tempSockFd, tempBuf, strlen(tempBuf));tempDataLen = Read(tempSockFd, tempBuf, MAXLINE);if (tempDataLen == 0) {printf("the other side has been closed.\n");} else {Write(STDOUT_FILENO, tempBuf, tempDataLen);}//of if}//of whileClose(tempSockFd);return 0;
} //of main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pmbok第七版_PMBOK第七版要来了!都有哪些变化?你准备好了么?

PMBOK第7版#PMP##职场##项目管理##战略##价值#2020年1月15日PMBOK 第7版的征求意见稿发布&#xff0c;并于2020年1月14日结束意见征集&#xff0c;预计于今年第四季度发布。基于我的项目组合管理(PfMP)&#xff0c;项目集管理(PgMP),项目管理(PMP)的培训和研究经验&#xff0c;…

Linux编程基础 8.2:多线程并发服务器

2 多线程并发服务器 每个进程可打开的文件描述符数量有限&#xff0c;且进程占用资源较多&#xff0c;系统中进程的数量又受到内存大小的限制&#xff0c;为保证服务器效率&#xff0c;降低服务器消耗&#xff0c;可利用多线程机制搭建并发服务器。 【案例2】搭建多线程并发服…

简述python的特性_Python的特性概要

1、和C比较&#xff0c;Python是解释型的语言&#xff0c; 2、a>字节码特性 b>动态语义&#xff0c;即在赋值时才确定数据类型 c>缩进&#xff0c;点击tap键缩进四个空格&#xff0c;使用编译器是记得查看&#xff01;3、注意 写Python的时候首先要记得定义编码格式&a…

android netty导入_Android Netty框架的使用

public abstract class BaseClientMgr extends Subject implementsIClientConnect {protected boolean isRunning; //当前是否正在连接protected boolean isSending; //是否正在发送 线程是否被占用private int mPort; //连接服务器的端口号private int mCommunication; //通讯…

python自动化办公实例展示_python自动化办公?学这些就够用了

知乎上有人提问&#xff1a;用python进行办公自动化都需要学习什么知识呢&#xff1f;这可能是很多非IT职场人士面临的困惑&#xff0c;想把python用到工作中&#xff0c;却不知如何下手&#xff1f; python在自动化办公领域越来越受欢迎&#xff0c;批量处理简直是加班族的福音…

Linux编程基础 8.3:I/O多路转接服务器

1 简介 为进一步提升服务器效率&#xff0c;人们提出了一种被称为I/O多路转接的模型。其中“多路”指代连接到服务器的多个客户端程序&#xff0c;而“转接”则是指在服务器主线与各分支之间设置一个“岗位”&#xff0c;由该岗位实现监控多路连接中数据状态的功能&#xff0c…

handler原子锁_多线程编程之原子锁

在《多线程编程之数据访问互斥》一文中简单介绍了原子锁&#xff0c;这里再详细说一下原子锁的概念和用途。(1)简单数据操作如果在一个多线程环境下对某个变量进行简单数学运算或者逻辑运算&#xff0c;那么就应该使用原子锁操作。因为&#xff0c;使用临界区、互斥量等线程互斥…

python统计中文字符的个数_python统计中文字符数量的两种方法

方法一&#xff1a; def str_count(str): 找出字符串中的中英文、空格、数字、标点符号个数 count_en count_dg count_sp count_zh count_pu 0 for s in str: # 英文 if s in string.ascii_letters: count_en 1 # 数字 elif s.isdigit(): count_dg 1 # 空格 elif s.issp…

测井储层参数预测+人工智能方法

1 问题描述 测井储层参数预测 地层泥质含量&#xff1b;地层孔隙度&#xff08;POR&#xff09;&#xff1b;含水饱和度&#xff08;SW&#xff09;&#xff1b;渗透率&#xff08;PERM&#xff09;。 输入&#xff1a;声波时差&#xff08;AC&#xff09;、补偿中子&#x…

php spry文本域_Spry框架及验证构件

图9-71Spry框架原理虽然这些文件存放在服务器上&#xff0c;但实际上是被加载到浏览器中运行的。框架的用户将所有需要的文件链接到HTML文档中&#xff0c;以使用不同的组件&#xff0c;来获得更丰富的用户体验。Spry框架是和设计人员紧密相关的&#xff0c;因此框架中的每个元…

网络系统安全课程--目录

本系列教程以《网络与系统安全》为基础&#xff0c;希望在大家的帮助下&#xff0c;逐步完善网络与系统安全研究生课程。 1 经典攻击分析 1.1 中间人攻击 1.2 源替换攻击 1.3 消息重放攻击 1.4 平行会话攻击 1.5 反射攻击 1.6 交错攻击 1.7 类型缺陷攻击 1.8 身份标识省略导致…

windows 安装openssh服务端_Git神器| SourceTree安装使用教程

SourceTree 是 Windows 和Mac OS X 下免费的Git客户端管理工具。支持创建、克隆、提交、push、pull 和合并等操作。一、sourcetree的安装1. 下载sourcetree下载链接&#xff1a;Sourcetree | Free Git GUI for Mac and Windows2. 安装sourcetree点击安装&#xff0c;第一个创建…

c语言小学生四则运算出题_软件工程第一次作业,小学生四则运算的出题程序...

一、背景阿超有个儿子上小学二年级&#xff0c;老师每天让家长给孩子出30道加减法题&#xff0c;虽然不多&#xff0c;但是每天都做也算是个负担&#xff0c;阿超作为一个老牌程序员当然想用计算机来解决这个小问题&#xff0c;目前对于这个问题对于任何语言都不是问题&#xf…

中国大学生计算机设计大赛--软件应用与开发类--经验总结

1 大赛介绍 中国大学生计算机设计大赛是我国高校面向本科生最早的赛事之一&#xff0c;自2008年开赛至2019年&#xff0c;一直由教育部高校与计算机相关教指委等或独立或联合主办。此赛目前是全国普通高校大学生竞赛排行榜榜单赛事之一。 我们参加了很多届大赛&#xff0c;在2…

python如何使用ppip安装xlwt_Python-xlwt库的基本使用

安装xlwt库 pip install xlwt 基本使用 ①创建工作簿 wa xlwt.Workbook() ②添加工作表 添加“class”工作表 b wa.add_sheet(class) ③向工作表写入数据 注释&#xff1a;(0,0,姓名)(行、列、内容)第0行的第0个也就是excel中的A1&#xff0c;(0,1)就是B1..... b.write(0,0,姓…

网络与系统安全1.1 中间人攻击

1 Diffie-Hellman密钥交换过程 2 中间人攻击过程

tomcat启动占了12g_tomcat服务为何报内存相关错误??

本帖最后由 linux_love 于 2014-9-19 11:46 编辑多谢各位英雄支持&#xff0c;这个问题困扰我N久了&#xff0c;昨天终于让我给拿下了&#xff0c;在Linux下有个CommitLimit 用于限制系统应用使用的内存资源&#xff0c;#grep -i commit /proc/meminfoCommitLimit: 20389524…

python调用键盘_使用 Python 控制自己的电脑和键盘是一种什么样的体验?

可能有时候你需要在电脑做一些重复的点击或者提交表单等操作&#xff0c;如果能通过 Python 预先写好相关的操作指令&#xff0c;让它帮你操作&#xff0c;然后你自己爱干嘛干嘛去&#xff0c;有点 “按键精灵” 的意思&#xff0c;是不是感觉有点爽呢&#xff1f; 那么如何使用…

网络与系统安全4.1 基于随机搜索的黑盒对抗攻击方法

1 摘要 神经网络模型容易受到对抗样本的攻击&#xff0c;根据攻击者是否能获取到模型内部参数可以把攻击类型分为白盒攻击和黑盒攻击。 白盒攻击比较常见&#xff0c;但其对目标模型的威胁程度要远低于黑盒攻击。传统黑盒攻击往往都是基于梯度实现的&#xff0c;并且具有查询…

mybatis 二级缓存失效_二级缓存updateBatchById失效

### 当前使用版本(必须填写清楚&#xff0c;否则不予处理)3.3.0### 该问题是怎么引起的&#xff1f;**([最新版](https://search.maven.org/search?qg:com.baomidou%20a:mybatis-*)上已修复的会直接**close**掉)**### 重现步骤**字典mapper**CacheNamespacepublic interface D…