多进程实现并发服务器(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 ...
随机推荐
- vim 文本替换讲解
在VIM中进行文本替换: 1. 替换当前行中的内容: :s/from/to/ (s即substitude) :s/from/to/ : 将当前行中的第一个from,替换成to.如果当前行含有多个 fr ...
- oracle取前10条记录
--oracle取前十条数据 --(1)第一种 ; --(2)第二种 ;
- scrapy 爬虫教程
http://python.jobbole.com/87284/ 这篇教程不错,后面的参考链接很好 另外,注意xpath的坑,用chrome的网页调试工具会对xpath会自动优化,自己加上tbody, ...
- k8s 集群部署--学习
kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) Pod:若 ...
- nice -n 10 bash 和 chrt 10 bash 和 echo -17 > /proc/PID/oom_score_adj
进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的. 就是说在同一个调度周期中,优先级高的进程占用的时间长些 ...
- android studio: 快捷键生成getter/setter方法时自动加m的问题
平时使用Android Studio 在写实体类的时候,习惯给实体类的成员变量前面加上一个"m" 修饰符表示这是一个成员变量,这也是搞java的一种约定俗成的写法,本来这是没有问题 ...
- Syntax error: "(" unexpected shell里面的报错解决
author:headsen chen date : 2019-08-08 11:11:38 notice : 个人原创 Ubuntu上运行shell脚本总是报下面这个错误,在centos下面或者 ...
- Flutter Form正确使用方法【可正确获取提交的表单数据】
import 'package:flutter/material.dart'; void main() => runApp(new HomePage()); class HomePage ext ...
- Laya微信小游戏本地缓存
测试版本2.1.1.1 查看bin/libs/laya.wxmini.js. 发现只会缓存png,jpg. 声音和atlas,json不会缓存. 对比白鹭,白鹭是将png,jpg,atlas,json ...
- PAT 甲级 1145 Hashing - Average Search Time (25 分)(读不懂题,也没听说过平方探测法解决哈希冲突。。。感觉题目也有点问题)
1145 Hashing - Average Search Time (25 分) The task of this problem is simple: insert a sequence of ...