博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多进程实现并发服务器(TCP)
阅读量:4311 次
发布时间:2019-06-06

本文共 1407 字,大约阅读时间需要 4 分钟。

 前提:基于Linux系统的学习

/*多进程实现并发服务器父进程任务  1.从未决连接队列中取出请求,建立和客户端的连接,cfd  2.创建子进程  3.close(cfd)  4.负责子进程的收尸工作子进程的任务  1.close(sfd)  2.子进程负责处理客户端消息  close(sfd)  exit(0)*/#include 
#include
/* See NOTES */#include
#include
#include
#include
#include
//信号自定义函数,来处理回收子进程资源void doit(){ wait(NULL); return;} int main(){ char buf[128]; char IP[128]; 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,0); if(sfd==-1){ perror("socket"); return 0; } //初始化serv的成员 serv.sin_family=AF_INET; serv.sin_port=htons(7007); serv.sin_addr.s_addr=htonl(INADDR_ANY); //将sfd绑定到服务器 int b=bind(sfd,(struct sockaddr*)&serv,sizeof(serv)); if(b==-1){ perror("bind"); return -1; } //将sfd设置为被动监听状态 listen(sfd,5); while(1){ clie_len=sizeof(clie); //建立和客户端的连接 int cfd=accept(sfd,(struct sockaddr*)&clie,&clie_len); if(sfd==-1){ perror("accept"); return -1; } printf("%s\n",inet_ntop(AF_INET,&clie.sin_addr,IP,128)); pid_t pid=fork(); if(pid==-1){ perror("fork"); return -1; } if(pid==0){ //子进程 close(sfd); int r=read(cfd,buf,128); write(1,buf,r); write(cfd,msg,strlen(msg)); close(cfd); exit(0); } else{ //父进程 close(cfd); } } return 0;}

 

转载于:https://www.cnblogs.com/qiuyuwutong/p/9350123.html

你可能感兴趣的文章
jQuery 菜单插件
查看>>
SQL函数汇总(MySQL教材)
查看>>
软件需求的薛定谔之猫
查看>>
字符串删除指定符号(不限位置)
查看>>
ArrayList、LinkedList、Vector的区别
查看>>
Hive常用函数 傻瓜学习笔记 附完整示例
查看>>
排列组合算法(基于c++实现)
查看>>
控制器跳转:tabbarcontroller怎么写代码切换视图?
查看>>
数组的常用排序
查看>>
异常(Exception)
查看>>
8款替代Dreamweaver的开源网页开发工具
查看>>
DRF之权限认证,过滤分页,异常处理
查看>>
IOC容器中Bean的生命周期方法
查看>>
网络基础 URL
查看>>
swoole安装和ssdb
查看>>
ACM学习之路————一个大整数与一个小整数不得不说得的秘密
查看>>
References & the Copy-Constructor
查看>>
local与protected的区别
查看>>
C#中几个经常犯的错误总汇
查看>>
第六周作业----内聚耦合
查看>>