多进程实现并发服务器(TCP)
前提:基于Linux系统的学习
- /*多进程实现并发服务器
- 父进程任务
- 1.从未决连接队列中取出请求,建立和客户端的连接,cfd
- 2.创建子进程
- 3.close(cfd)
- 4.负责子进程的收尸工作
- 子进程的任务
- 1.close(sfd)
- 2.子进程负责处理客户端消息
- close(sfd)
- exit(0)
- */
- #include <stdio.h>
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <string.h>
- #include <signal.h>
- #include <stdlib.h>
//信号自定义函数,来处理回收子进程资源- void doit(){
- wait(NULL);
- return;
- }
- int main(){
- char buf[];
- char IP[];
- char*msg="hector pro_bf_serv\n";
- struct sockaddr_in serv;
- struct sockaddr_in clie;
- socklen_t clie_len;
- signal(SIGCHLD,doit);
- //创建socket通讯端口,sfd
- int sfd=socket(AF_INET,SOCK_STREAM,);
- if(sfd==-){
- perror("socket");
- return ;
- }
- //初始化serv的成员
- serv.sin_family=AF_INET;
- serv.sin_port=htons();
- serv.sin_addr.s_addr=htonl(INADDR_ANY);
- //将sfd绑定到服务器
- int b=bind(sfd,(struct sockaddr*)&serv,sizeof(serv));
- if(b==-){
- perror("bind");
- return -;
- }
- //将sfd设置为被动监听状态
- listen(sfd,);
- while(){
- clie_len=sizeof(clie);
- //建立和客户端的连接
- int cfd=accept(sfd,(struct sockaddr*)&clie,&clie_len);
- if(sfd==-){
- perror("accept");
- return -;
- }
- printf("%s\n",inet_ntop(AF_INET,&clie.sin_addr,IP,));
- pid_t pid=fork();
- if(pid==-){
- perror("fork");
- return -;
- }
- if(pid==){//子进程
- close(sfd);
- int r=read(cfd,buf,);
- write(,buf,r);
- write(cfd,msg,strlen(msg));
- close(cfd);
- exit();
- }
- else{//父进程
- close(cfd);
- }
- }
- return ;
- }
多进程实现并发服务器(TCP)的更多相关文章
- Python学习笔记(六)多进程实现并发服务器
这个相对于多进程更加简单,每accept一个新的连接就创建一个新的线程.代码如下: # coding: utf-8 import socket import sys import errno impo ...
- Python学习笔记(五)多进程实现并发服务器
每创建一个TCP连接,就创建一个进程. 代码如下: # coding: utf-8 import socket import os import sys import signal import ...
- LINUX环境并发服务器的三种实现模型
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器.按处理方式来分有循环服务器和并发服务器. 1 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了 ...
- python实现并发服务器实现方式(多线程/多进程/select/epoll)
python实现并发服务器实现方式(多线程/多进程/select/epoll) 并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...
- Linux 并发服务器编程(多进程)
文章目录 说明 注意事项 server.c client.c 运行截图 说明 在Linux中通过流式套接字编程(TCP),实现一个并发服务器的访问回显,适合刚学完Linux套接字编程的朋友进行巩固训练 ...
- Linux客户/服务器程序设计范式1——并发服务器(多进程)
引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...
- tcp并发服务器(c20w)
** 原创文章,请勿转载 ** 并发服务器是一个老生常谈的话题,今天这里也写一个. 1. 目标: 同时在线连接20万(c20w). 开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLA ...
- UNIX网络编程——并发服务器(TCP)
在迭代服务器中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现. 网络服务器通常用fork来同时 ...
- web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)
知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...
随机推荐
- tail -f 加过滤功能
实时查看日志 通过-f参数,我们可以实时查看文件的新增内容: $ tail -f itbilu.log 注意:使用-f参数时不会中断文件监视,需要通过ctrl+c手动结束. 实时日志查看与grep过滤 ...
- 【转】Root检测与反检测
0x00背景需要在手机上构建一个环境对root过的设备进行伪装,让设备里面的应用将该设备当成未root的设备.10x01 Root检测手段1.检查已安装的APK包:SuperSU应用程序或者一键roo ...
- GROUP_CONCAT 将mysql多条数据合并为一条
实现将多条数据合并为一条数据,在mysql中可以通过 GROUP_CONCAT 函数实现 上面是潇leader发我的和工作不相关的小小小需求描述,很明显是要把id和name相同的数据合并为一条,下面按 ...
- C#利用反射获取实体类的主键名称或者获取实体类的值
//获取主键的 PropertyInfo PropertyInfo pkProp = ).FirstOrDefault(); //主键名称 var keyName=pkProp.Name; //实体类 ...
- python 设计模式之原型模式 Prototype Pattern
#引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...
- Spring Boot Actuator:健康检查、审计、统计和监控(转)
Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...
- 【转载】 tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数
原文地址: https://blog.csdn.net/dcrmg/article/details/79776876 ----------------------------------------- ...
- 实战一:LoadRunner性能测试利器
转自:https://blog.csdn.net/weixin_42350428/article/details/82106603 企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且 ...
- Oracle中复制表的方法(create as select、insert into select、select into)
转: Oracle中复制表的方法(create as select.insert into select.select into) 2018-07-30 22:10:37 小白白白又白cdllp 阅读 ...
- 【计算机视觉】图像配准(Image Registration)
(Source:https://blog.sicara.com/image-registration-sift-deep-learning-3c794d794b7a) 图像配准方法概述 图像配准广泛 ...