网络编程代码实例:守护进程版

news2024/11/18 17:46:22

文章目录

  • 前言
  • 代码仓库
  • 内容
  • 目录结构
  • 代码
  • 结果
  • 总结
  • 参考资料
  • 作者的话

前言

网络编程代码实例:守护进程版。


代码仓库

  • yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)
  • Environment-and-network-programming-examples: 环境和网络编程实例 (gitee.com)

内容

  • 使用传输控制协议(TCP)
  • 检测recv()返回值,遇到信号或网络中断会重启
  • 为保证代码简洁,部分输入输出和字符串处理函数未获取返回值进行错误检测
  • 服务端作为守护进程启动,设置无缓冲IO,标准输入、输出和错误重定向并实时记录到日志文本文件。在main()开头注释不调用create_daemon(),可不作为守护进程启动——增加
  • 服务端使用signal()注册SIGCHLD信号处理函数(signal()函数对信号处理一次后,信号恢复默认行为,需要在信号处理函数中重新注册)。信号处理函数中使用可重入函数和保存并恢复旧errno方案,避免重入错误。父进程接收SIGCHLD信号后调用循环非阻塞waitpid()可处理同时终止的多个子进程,避免子进程成为僵尸进程——增加
  • 服务端检测accept()慢系统调用的返回值,遇到信号中断会重启。在三次握手后且accept()返回前的时序,收到客户端RST重新连接,依据POSIX标准重启——增加
  • 服务端设置套接字选项:SO_KEEPLIVE。客户端不发送数据也可以检测到服务端主机崩溃、主机崩溃后重启或网络不可达——增加
  • 服务端设置套接字选项:SO_REUSEADDR。服务端Ctrl+C或意外中止后,不会经过TIME_WAIT状态,bind()不会报错:Address already in use,可立即重启服务端。连接套接字子进程正常运行,监听套接字父进程可立即重启。允许多个IP地址绑定同一个端口——增加
  • 服务端多进程,一个服务端可并发连接多个客户端
  • 服务端使用getpeername()而不是传递客户端sockaddr_in{}参数获取客户端地址——修改
  • 用户在客户端终端输入,可多次手动通信
  • 3个客户端代码实例分别使用IO复用的select、poll和epoll技术,同时监听用户输入和网络接收,可即时检测到服务端进程终止和服务端主机关机
  • Makefile文件增加注释和生成.o目标文件逻辑——增加

目录结构

daemon_process/:

  • bin/
  • obj/
  • src/
  • log.txt:以守护进程方式(未注释main()中的creat_daemon()),运行daemon_process/bin/server生成
  • Makefile

daemon_process/bin/:运行Makefile生成

  • client_epoll
  • client_poll
  • client_select
  • server

daemon_process/obj/:运行Makefile生成

  • client_epoll.o
  • client_poll.o
  • client_select.o
  • server.o

daemon_process/src/:

  • client_epoll.c
  • client_poll.c
  • client_select.c
  • server.c

代码

由于代码篇幅较多,在博客中直接粘贴并呈现会显得冗长,因此未在博客中放置代码。请前往"代码仓库"查看或获取相关代码。


结果

操作时序:

  1. make clean:清理文件
  2. make all:生成文件
  3. cd bin:切换到二进制文件目录
  4. ./server: 启动服务端
  5. ps -ef | grep -w “./server” | grep -v grep:查看服务端进程(服务端父进程9949作为后台守护进程启动;此时无客户端连接,所以无服务端子进程)
  6. ./client_select:启动客户端client_select,发送消息"client_select"
  7. ./client_client_poll:启动客户端client_poll,发送消息"client_poll"
  8. ./client_epoll:启动client_epoll,发送消息"client_epoll"
  9. Ctrl+C:使客户端client_select异常终止
  10. Ctrl+D:使客户端client_poll正常终止
  11. kill 9949:终止服务端父进程9949
  12. ps -ef | grep -w “./server” | grep -v grep:查看服务端进程(服务端父进程9949终止;服务端子进程10241仍与客户端client_epoll连接)
  13. 客户端client_epoll,发送消息"client_epoll2",能够正常通信
  14. kill 10241:终止服务端子进程10241,客户端client_epoll被迫终止

server:

在这里插入图片描述
client_select:

在这里插入图片描述
client_poll:

在这里插入图片描述

client_epoll:

在这里插入图片描述

log.txt:

在这里插入图片描述


总结

网络编程代码实例:守护进程版。


参考资料

  • 《UNIX环境高级编程(第3版)》作者:W.Richard Stevens,Stephen A.Rago
  • 《UNIX网络编程(第3版)》作者:W.Richard Stevens,Bill Fenner,Andrew M.Rudoff

作者的话

  • 感谢参考资料的作者/博主
  • 作者:夜悊
  • 版权所有,转载请注明出处,谢谢~
  • 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
  • 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
  • 文章在认识上有错误的地方, 敬请批评指正
  • 望读者们都能有所收获

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XShell配置以及使用教程

目录 1、XShell介绍 2、安装XShell 1. 双击运行XShell安装文件,并点击“下一步” 2. 点击“我接受许可证协议中的条款”,点击“下一步” 3. 点击“浏览”更改默认安装路径,点击“下一步” 4. 直接点击“安装” 5. 安装完成&#xff0…

C语言小游戏的实现——三子棋

前言 Hello!友友们,前边我们已经学习了C语言的基础知识,但单纯的理论和简单的代码演示是无法真正做到巩固所学的知识的,那么今天我将会带领大家,根据之前所学的知识,来写一个三子棋小游戏。 目录 前言 总…

从C出发 31 --- 指针专题经典问题剖析

int a 0; int* p &a; //p作为指针指向了a, p 保存的是a 变量的内存地址,// p 这个指针本质是变量,这个变量有没有内存地址?// 有内存地址,为什么?// 因为它作为变量,肯定要占用内存空间的// p 这个变…

第十一章 使用Bind提供域名解析服务

文章目录 第十一章 使用Bind提供域名解析服务一、DNS域名解析服务1、DNS简介2、服务器类型3、13台根DNS服务器的具体信息 二、安装Bind服务程序1、Bind简介2、Bind安装3、关键配置文件4、修改主配置文件5、正向解析实验(1)、编辑区域配置文件&#xff08…

processing官方教程笔记(附加官网链接)更新中~

官方参考文档:https://processing.org/reference 官网视频:https://www.youtube.com/user/shiffman/playlists?view50&sortdd&shelf_id2 b站up主转载官方视频:https://www.bilibili.com/video/BV147411d7kY?p1&vd_source07ce5c…

【计算机三级网络技术】 第六篇 真题练习

文章目录 IPS(入侵防护系统)相关知识点蓝牙服务器技术DNS 服务器WWW 服务器FTP 服务器邮件(Winmail 邮件服务器)生成树协议IEEEVLAN 标识的描述DHCP 服务器 IPS(入侵防护系统)相关知识点 1、入侵防护系统&…

迪赛智慧数——柱状图(象形标识图):在选择另一半时,你更看重的是?

效果图 好看只排第六,第一确实众望所归!当代男女择偶标准出炉,一张图带你看清。 女性挑选另一半时,她们更看重伴侣收入高、职业体面、工作能力强、受教育程度高,还得和自己有共同话题。 男性择偶观和女性恰恰相反&am…

第二届网刃部分WP

第二届网刃部分WP 玩坏的winxp 用VM打开附件时候打不开,后来用DiskGenius软件打开,发现桌面中存在有五张图片 在图片meiren.png中发现有隐藏压缩包 foremost分离文件,发现图片 010查看发现还有一层压缩包,再次分离发现压缩包…

自动售货机程序找零博图程序实现

1、操作界面 2、程序实现 REGION 找零确认 IF #找零确认 THEN //复位 #"50元张数" : 0.0; #"20元张数" : 0.0; #"10元张数" : 0.0; #"5元张数" : 0.0; #"1元张数…

Mysten Labs宣布推出积极贡献者和早期支持者ACES计划

Mysten Labs宣布推出积极贡献者和早期支持者(ACES,Active Contributors & Early Supporters)计划。这是对进入Sui主网的社区成员所做努力的巨大认可。 如果您在5月3日Sui主网启动之前就加入Sui Discord,请于5月18日凌晨2点&a…

JUC并发编程16 | CAS自旋锁

CAS自旋锁 是什么,干什么,解决了什么痛点?如何解决,如何使用。 原子类:java.util.concurrent.atomic 在没有CAS之前,多线程环境不使用原子类保证线程安全i等操作,会出现数据问题,…

LeetCode特训 -- Week3 (字符串)

目录 字符串基础 字符串基本操作 字符串匹配算法 字符串异位词问题 分组分类问题和快速查找数据结构之间存在一定的关系。 字符串回文串问题 留下悬念:高级字符串算法题目(字符串 dp) 字符串基础 字符串定义:n个字符顺次排列而成的序列. 子串&…

MySQL好玩新特性:离线模式

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:Yejinrong/叶金荣文章来源:GreatSQL社区原创 继续吹MySQL 8.0~ 在以前,当需要对MySQL数…

CVPR 2023 | VoxelNeXt实现全稀疏3D检测跟踪,还能结合Seg Anything

在本文中,研究者提出了一个完全稀疏且以体素为基础的3D物体检测和跟踪框架VoxelNeXt。它采用简单的技术,运行快速,没有太多额外的成本,并且可以在没有NMS后处理的情况下以优雅的方式工作。VoxelNeXt在大规模数据集nuScenes、Waymo…

《编程思维与实践》1064.A-B(Big Integer)

《编程思维与实践》1064.A-B(Big Integer) 题目 思路 两个大整数做减法有可能出现结果为负的情况,因此结构体BIGINT需要补充符号位sign, 因为减法是个位对齐进行操作,为了方便起见,本题还是采用逆序(个位开始)存储. 注意到本题的两个整数均非负,所以不需要考虑转化为加法的情况…

TOOM舆情监测系统:从原理到应用

舆情监测系统是一种可以帮助企业、政府等机构了解公众对自己的看法和态度,提前发现和预测可能出现的危机或负面舆情,从而进行预警和应对的工具。本文将从原理到应用,通过国内具体案例分析,探讨舆情监测系统的相关知识。 一、舆情…

DSP:数字信号处理的原理及应用

什么是DSP?DSP一般有两种解释: 1、Digital Signal Processing,数字信号处理技术,简称DSP。是一门涉及许多学科而又广泛应用于许多领域的新兴学科。数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。数字…

有哪些好用的AI工具?

现在有很多好用的AI工具,以下是一些常用的: 1. TensorFlow:谷歌开发的深度学习框架,支持多种编程语言,包括Python、C、Java等。 2. PyTorch:Facebook开发的深度学习框架,易于使用,…

干货分享:PCB防静电设计的必要性

平时通过走路穿衣等日常活动带来的摩擦,会产生不同幅值的静电电压,但其能量很小不会对人体产生伤害,不过对于电子元器件来说,这种静电能量却是不能忽视的。 在干燥的环境下,人体静电(ESD)的电压…

matlab实验二可视化

学聪明点,自己改,别把我卖了 一、实验目的及要求 要求 1、掌握 MATLAB常用的二维和三维绘图函数 2、掌握MATLAB的图形注释 3、熟悉MATLAB常用的图形修饰 4、熟悉MATLAB的图形动画 实验原理 1、MATLAB二维绘图:plot,fplot,fimplicit&#xf…