多进程并发服务器C++实现字符串小写到大写转换

本文介绍了一个C++实现的多进程并发服务器,该服务器在接收到客户端连接请求时创建子进程来处理数据交互。每个子进程负责一个客户端,处理字符串的小写到大写的转换。父进程继续监听新的连接请求,并通过信号处理机制回收已完成任务的子进程。在使用这种服务器时,需要注意文件描述符限制、系统最大进程数以及进程创建对性能的影响。
摘要由CSDN通过智能技术生成

多进程并发服务器

在这里插入图片描述
       服务器server执行accept函数等待客户端A,B,C,D与之建立连接,假设客户端A与服务器建立连接时,服务器在就创建一个子进程,子进程负责与客户端A进行数据交互, (如果其他客户端再与服务器进行连接,而服务器忙着与A进行数据交互,则不会顾及其他客户端,这也是他的缺点),而父进程则继续监听其他客户端,当其他客户端进行连接时,服务器再创建一个新的子进程与之进行交互.

       当父进程与与客户端连接完成后,会产生一个cfd和lfd , 当fork()产生一个子进程时,则会将这个cfd与lfd 继承,cfd可以用于与客户端进行数据交互,而lfd对于子进程来说并没有用处,所以子进程要将继承的lfd关闭.对于父进程来说父进程不需要与其他客户端进行数据交互,所以父进程需要关闭cfd.

       子进程完成与客户端的数据交互后,子进程会退出变成僵尸进程,所以父进程要对子进程进行回收.可以用回调机制,利用信号进行处理:利用SIGCHLD注册信号捕捉函数,在捕捉函数内调用waitpid()回收子进程

使用多进程并发服务器时要考虑以下几点:

  1. 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)
  2. 系统内创建进程个数(与内存大小相关)
  3. 进程创建过多是否降低整体服务性能(进程调度)

多线程高并发服务器实现将字符串转化大写

       客户端往服务器端发送字符串,服务器把字符串转换成大写之后再发送回给客户端。

大致流程:

在这里插入图片描述

server.cpp

#include <iostream>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>
#include <ctype.h>
#include <strings.h>
#include <assert.h>
using namespace std;

#define MAXLINE 4096
#define SERV_PORT 8000
//信号捕捉函数,信号:SIGCHLD:当子进程状态发生变化(退出或暂停)时产生
void do_sigchild(int num){
   
    while(waitpid(0,NULL,WNOHANG) > 0){
   //回收子进程
    }
}


int main(){
   
    struct sockaddr_in servaddr,cliaddr;
    socklen_t cliaddr_len = sizeof(cliaddr);
    int listenfd,connfd;
    char buf[MAXLINE]</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值