在服务器多进程版本的基础上,使用管道来向一个子进程发送接收到的数据,该子进程将接收到的数据保存到文件中。客户端代码不变。

服务器代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <csignal>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <sys/socket.h>const int BUF_SIZE = 30;void error_handling(const char *messgae);
void read_childproc(int sig);// 接收一个参数,argv[1]为端口号
int main(int argc, char *argcv[]) {int server_sock, client_sock;struct sockaddr_in server_addr, client_addr;int fds[2]; // 管道描述符pid_t pid;struct sigaction act;socklen_t addr_size;int str_len, state;char buf[BUF_SIZE];if (argc != 2) {printf("Usgae : %s <port>\n", argcv[0]);exit(1);}act.sa_handler = read_childproc;sigemptyset(&act.sa_mask);act.sa_flags = 0;state = sigaction(SIGCHLD, &act, 0);server_sock = socket(PF_INET, SOCK_STREAM, 0);memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(atoi(argcv[1]));if (bind(server_sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {error_handling("bind() error");}if (listen(server_sock, 5) == -1) {error_handling("listen() error");}pipe(fds);pid = fork();if (pid == 0) { // 负责保存数据到文件的子进程FILE *fp = fopen("echomsg.txt", "wt");char msgbuf[BUF_SIZE];int len;for (int i = 0; i < 10; ++i) {len = read(fds[0], msgbuf, BUF_SIZE);fwrite((void*)msgbuf, 1, len, fp);}fclose(fp);return 0;}while (1) {addr_size = sizeof(client_addr);client_sock =accept(server_sock, (struct sockaddr*)&server_addr, &addr_size);if (client_sock == -1) {continue;} else {puts("new client connected...");}pid = fork();if (pid == 0) {close(server_sock);while ((str_len = read(client_sock, buf, BUF_SIZE)) != 0) {write(client_sock, buf, str_len);write(fds[1], buf, str_len); // 发送数据给负责保存文件的子进程}close(client_sock);puts("client disconnected...");return 0;} else {close(client_sock);}}close(server_sock);return 0;
}

项目代码

github

参考

《TCP/IP网络编程》

C++回声服务器_6-多进程pipe版本服务器相关推荐

  1. 【Linux网络编程学习】使用socket实现简单服务器——多进程多线程版本

    此为牛客Linux C++课程和黑马Linux系统编程笔记. 1. 多进程版 1.1 思路 大体思路与上一篇的单进程版服务器–客户端类似,都是遵循下图: 多进程版本有以下几点需要注意: 由于TCP是点 ...

  2. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)

    我的世界古风小阁服务器 ---- 服务器名称:古风小阁 ---- 服务器版本:1.15.2 ---- 服务器类型:纯净生存(无需下载专用客户端) ---- 服务器的IP:222.187.238.80: ...

  3. SVN 版本服务器搭配全过程详解(含服务端、客户端)

    1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Serve ...

  4. Windows服务器下升级PHP版本的方法

    这篇文章主要介绍了Windows服务器下升级PHP版本的方法,需要的朋友可以参考下 要升级PHP,我们首先得下载一个自动安装PHP组件到IIS中的软件,推荐的是星外公司开发的PHP安装包,我们可以到他 ...

  5. SVN 版本服务器搭配全过程详解(服务端、客户端)[转]

    1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Serve ...

  6. 1高并发服务器:多进程服务器

     1多进程并发服务器 使用多进程并发服务器时要考虑以下几点: A.父最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符) B.系统内创建进程个数(和内存大小相关) C.进程 ...

  7. 华为怎么安装服务器系统版本,服务器怎么安装操作系统版本

    服务器怎么安装操作系统版本 内容精选 换一换 Atlas 800 训练服务器(型号 9010)安装上架.服务器基础参数配置.安装操作系统等操作请参见<Atlas 800 训练服务器 用户指南 ( ...

  8. 微软project服务器搭建,Project Professional 版本(Project Server 2010 设置)

    Project Professional 版本 利用"Project Professional 版本",您可以指定将能够连接到 Project Server 2010 环境的 Pr ...

  9. Linux网络编程——tcp并发服务器(多进程)

    https://blog.csdn.net/lianghe_work/article/details/46503895 一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多 ...

最新文章

  1. 【FPGA】SRIO例子程序仿真分析实践
  2. 4.10 风格代价函数-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. Sqlite error- INSERT failed: datatype mismatch
  4. tf.app.flags和tf.app.run的使用
  5. 几句话实现导航栏透明渐变 – iOS
  6. Git基础教程(四)
  7. Caused by: java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected
  8. Delphi- repeate
  9. 心理学与生活 - 文化与社会
  10. WallPaperAbyss爬虫
  11. 关于IE无法打开站点XX已终止操作问题
  12. js 谷歌浏览器 关闭当前页
  13. 老司机带你一分钟了解网络分析仪程控软件
  14. 深度学习硬件-GPU-显卡
  15. RTP协议封装H264/H265/AAC
  16. 飞翔的小鸟 c++ 2.0版
  17. 浅析音乐对现代社会的影响
  18. 涂抺mysql 李丙洋_涂抹MySQL
  19. java结合高德地图Api处理位置信息
  20. HTTP请求和响应全过程解析

热门文章

  1. ZendGuard-5_0_1 使用备忘
  2. 关于spring-data-jpa的排序问题
  3. AAuto如何设置定时器
  4. ASP.NET MVC模型绑定int超出范围时
  5. MyEclipse 修改 默认的 工作空间(转)
  6. 速修复!NSA 报告四个严重和高危 Exchange Server RCE 漏洞
  7. Windows DNS Server 远程代码执行漏洞 (CVE-2021-24078) 的详细原理分析
  8. 美国发布“几乎无法入侵”的国家量子互联网蓝图,计划十年内出原型
  9. [ZigBee] 10、ZigBee之睡眠定时器
  10. Percona XtraBackup 安装介绍篇