前提:基于Linux系统的学习

  1. /*多进程实现并发服务器
  2. 父进程任务
  3. 1.从未决连接队列中取出请求,建立和客户端的连接,cfd
  4. 2.创建子进程
  5. 3.close(cfd)
  6. 4.负责子进程的收尸工作
  7.  
  8. 子进程的任务
  9. 1.close(sfd)
  10. 2.子进程负责处理客户端消息
  11. close(sfd)
  12. exit(0)
  13. */
  14. #include <stdio.h>
  15. #include <sys/types.h> /* See NOTES */
  16. #include <sys/socket.h>
  17. #include <arpa/inet.h>
  18. #include <string.h>
  19. #include <signal.h>
  20. #include <stdlib.h>

  21. //信号自定义函数,来处理回收子进程资源
  22. void doit(){
  23. wait(NULL);
  24. return;
  25. }
  26.  
  27. int main(){
  28. char buf[];
  29. char IP[];
  30. char*msg="hector pro_bf_serv\n";
  31. struct sockaddr_in serv;
  32. struct sockaddr_in clie;
  33. socklen_t clie_len;
  34. signal(SIGCHLD,doit);
  35. //创建socket通讯端口,sfd
  36. int sfd=socket(AF_INET,SOCK_STREAM,);
  37. if(sfd==-){
  38. perror("socket");
  39. return ;
  40. }
  41. //初始化serv的成员
  42. serv.sin_family=AF_INET;
  43. serv.sin_port=htons();
  44. serv.sin_addr.s_addr=htonl(INADDR_ANY);
  45. //将sfd绑定到服务器
  46. int b=bind(sfd,(struct sockaddr*)&serv,sizeof(serv));
  47. if(b==-){
  48. perror("bind");
  49. return -;
  50. }
  51. //将sfd设置为被动监听状态
  52. listen(sfd,);
  53. while(){
  54. clie_len=sizeof(clie);
  55. //建立和客户端的连接
  56. int cfd=accept(sfd,(struct sockaddr*)&clie,&clie_len);
  57. if(sfd==-){
  58. perror("accept");
  59. return -;
  60. }
  61. printf("%s\n",inet_ntop(AF_INET,&clie.sin_addr,IP,));
  62. pid_t pid=fork();
  63. if(pid==-){
  64. perror("fork");
  65. return -;
  66. }
  67. if(pid==){//子进程
  68. close(sfd);
  69. int r=read(cfd,buf,);
  70. write(,buf,r);
  71. write(cfd,msg,strlen(msg));
  72. close(cfd);
  73. exit();
  74. }
  75. else{//父进程
  76. close(cfd);
  77. }
  78. }
  79. return ;
  80. }

多进程实现并发服务器(TCP)的更多相关文章

  1. Python学习笔记(六)多进程实现并发服务器

    这个相对于多进程更加简单,每accept一个新的连接就创建一个新的线程.代码如下: # coding: utf-8 import socket import sys import errno impo ...

  2. Python学习笔记(五)多进程实现并发服务器

      每创建一个TCP连接,就创建一个进程. 代码如下: # coding: utf-8 import socket import os import sys import signal import ...

  3. LINUX环境并发服务器的三种实现模型

    服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器.按处理方式来分有循环服务器和并发服务器. 1  循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了 ...

  4. python实现并发服务器实现方式(多线程/多进程/select/epoll)

    python实现并发服务器实现方式(多线程/多进程/select/epoll)   并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...

  5. Linux 并发服务器编程(多进程)

    文章目录 说明 注意事项 server.c client.c 运行截图 说明 在Linux中通过流式套接字编程(TCP),实现一个并发服务器的访问回显,适合刚学完Linux套接字编程的朋友进行巩固训练 ...

  6. Linux客户/服务器程序设计范式1——并发服务器(多进程)

    引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...

  7. tcp并发服务器(c20w)

    ** 原创文章,请勿转载 ** 并发服务器是一个老生常谈的话题,今天这里也写一个. 1. 目标: 同时在线连接20万(c20w). 开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLA ...

  8. UNIX网络编程——并发服务器(TCP)

    在迭代服务器中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现. 网络服务器通常用fork来同时 ...

  9. web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)

    知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...

随机推荐

  1. tail -f 加过滤功能

    实时查看日志 通过-f参数,我们可以实时查看文件的新增内容: $ tail -f itbilu.log 注意:使用-f参数时不会中断文件监视,需要通过ctrl+c手动结束. 实时日志查看与grep过滤 ...

  2. 【转】Root检测与反检测

    0x00背景需要在手机上构建一个环境对root过的设备进行伪装,让设备里面的应用将该设备当成未root的设备.10x01 Root检测手段1.检查已安装的APK包:SuperSU应用程序或者一键roo ...

  3. GROUP_CONCAT 将mysql多条数据合并为一条

    实现将多条数据合并为一条数据,在mysql中可以通过 GROUP_CONCAT 函数实现 上面是潇leader发我的和工作不相关的小小小需求描述,很明显是要把id和name相同的数据合并为一条,下面按 ...

  4. C#利用反射获取实体类的主键名称或者获取实体类的值

    //获取主键的 PropertyInfo PropertyInfo pkProp = ).FirstOrDefault(); //主键名称 var keyName=pkProp.Name; //实体类 ...

  5. python 设计模式之原型模式 Prototype Pattern

    #引入 例子1: 孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来. 例子2:寄个快递下面是一个邮寄快递的场景:“给我寄个快递.”顾客说.“寄往什么地方?寄给……?”你问.“和上次差不多一样,只是邮 ...

  6. Spring Boot Actuator:健康检查、审计、统计和监控(转)

    Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...

  7. 【转载】 tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数

    原文地址: https://blog.csdn.net/dcrmg/article/details/79776876 ----------------------------------------- ...

  8. 实战一:LoadRunner性能测试利器

    转自:https://blog.csdn.net/weixin_42350428/article/details/82106603 企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且 ...

  9. 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 阅读 ...

  10. 【计算机视觉】图像配准(Image Registration)

    (Source:https://blog.sicara.com/image-registration-sift-deep-learning-3c794d794b7a)  图像配准方法概述 图像配准广泛 ...