Linux C++网络编程-王健伟

文章目录


Linux C++网络编程-王健伟

1-1课程详细介绍

(1)课程总述(2)基础要求和学习方法(3)简要自我介绍、讲解特点(4)课程详细说明(5)推荐书籍(6)结语

1-2环境搭建详细介绍

(1)windows下的vs2017安装(2)准备一个word文档(3)windows下的虚拟机安装(4)虚拟机中安装linux 操作系统(5)配置固定IP地址(6)配置远程连接(7)安装编译工具gcc,g++ 等(8)共享一个操作目录

2-1nginx简介、选择理由、安装和使用

(1)nginx简介(2)为什么选择nginx (3)安装nginx,搭建web服务器(3.1)安装前提(3.2)nginx源码下载以及目录结构简单认识(3.3)nginx的编译和安装(4)nginx的启动和简单使用(4.1)通讯程序基础概念

2-2nginx整体结构、进程模型

(1)nginx的整体结构(1.1)master进程和worker进程概览(1.2)nginx进程模型(1.3)调整worker进程数量(2) nginx进程模型细说(2.1)nginx重载配置文件(2.2)nginx热升级(2.3)nginx的关闭(2.4)总结

3-1学习nginx源码前的准备工作

(1)nginx源码总述(2)nginx源码查看工具(3)nginx源码入口函数定位(4)创建一个自己的linux下的c语言程序(5)nginx源码怎么讲

3-2nginx源码学法,终端和进程的关系说

(1)nginx源码学习方法(2)终端和进程的关系(2.1)终端与bash进程(2.2)终端上的开启进程(2.3)进程关系进一步分析(2.4)strace工具的使用(2.5)终端关闭时如何让进程不退出(2.6)后台运行

3-3信号的概念、认识、处理动作

(1)信号的基本概念(2)通过kill命令认识一些信号(3)进程的状态(4)常用的信号列举(5)信号处理的相关动作

3-4Unix/Linux体系结构、信号编程初步

(1)Unix/Linux操作系统体系结构(2)signal函数范例(2.1)可重入函数(2.2)不可重入函数的错用演示

3-5信号编程进阶、sigprocmask范例

(1)信号集(2)信号相关函数(3)sigprocmask等信号函数范例演示

3-6fork函数详解、范例演示

(1)fork()函数简单认识(1.1)fork()函数简单范例(1.2)僵尸进程的产生、解决,SIGCHLD(2)fork()函数进一步认识(3)完善一下fork()代码(3.1)一个和fork()执行有关的逻辑判断(4)fork()失败的可能性

3-7守护进程详解、范例演示

(1)普通进程运行观察(2)守护进程基本概念(3)守护进程编写规则(3.1)文件描述符(3.2)输入输出重定向(3.3)空设备(3.4)实现范例(4)守护进程不会收到的信号(4.1)SIGHUP信号(4.2)SIGINT、SIGWINCH信号(5)守护进程和后台进程的区别

4-1服务器程序目录规划、makefile编写

(1)信号高级认识范例(2)服务器架构初步(2.1)目录结构规划(2.2)编译工具make的使用概述(2.3)makefile脚本用法介绍(2.4)makefile脚本具体实现讲解

4-2读配置文件、查泄漏、设置标题实战

(1)基础设施之配置文件读取(1.1)前提内容和修改(1.2)配置文件读取功能实战代码(2)内存泄漏的检查工具(2.1)memcheck的基本功能(2.2)内存泄漏检查示范(3)设置可执行程序的标题(名称)(3.1)原理和实现思路分析(3.2)设置可执行程序的标题实战代码

4-3日志打印实战,优化main函数调用顺序

(1)基础设施之日志打印实战代码一(2)设置时区(3)基础设施之日志打印实战代码二(3.1)日志等级划分(3.2)配置文件中和日志有关的选项(4)捋顺main函数中代码执行顺序

4-4信号,子进程实战,文件IO详谈-1

(1)信号功能实战(2)nginx中创建worker子进程(2.1)sigsuspend()函数讲解(3)日志输出重要信息谈(3.1)换行回车进一步示意(3.2)printf()函数不加\n无法及时输出的解释(4)write()函数思考(4.1)掉电导致write()的数据丢失破解法(5)标准IO库

4-5信号,子进程实战,文件IO详谈-2

(1)信号功能实战(2)nginx中创建worker子进程(2.1)sigsuspend()函数讲解(3)日志输出重要信息谈(3.1)换行回车进一步示意(3.2)printf()函数不加\n无法及时输出的解释(4)write()函数思考(4.1)掉电导致write()的数据丢失破解法(5)标准IO库

4-6守护进程及信号处理实战

(1)守护进程功能的实现(2)信号处理函数的进一步完善(2.1)避免子进程被杀掉时变成僵尸进程

5-1C/S, TCP/IP协议妙趣横生、惟妙惟肖谈

(1)客户端与服务器(1.1)解析一个浏览器访问网页的过程(1.2)客户端服务器角色规律总结(2)网络模型(2.1)OSI七层网络模型(2.2)TCP/IP协议四层模型(2.3)TCP/IP协议的解释和比喻(3)最简单的客户端和服务器程序实现代码(3.1)套接字socket概念(3.2)一个简单的服务器端通讯程序范例(3.3)IP地址简单谈(3.4)一个简单的客户端通讯程序范例(3.5)客户端服务器程序综合演示和调用流程图(4)TCP和UDP的区别

5-2TCP三次握手详析、telnet,wireshark示范

(1)TCP连接的三次握手(1.1)最大传输单元MTU(1.2)TCP 包头结构(1.3)TCP 数据包收发之前的准备工作(1.4)TCP 三次握手建立连接的过程(1.5)为什么TCP握手是三次握手而不是二次(2)telnet工具使用介绍(3)wireshark监控数据包(3.1)TCP断开的四次挥手

5-3TCP状态转换,TIME_WAIT,SO_REUSEADDR

(1)TCP状态转换(2)TIME_WAIT状态(2.1)RST标志(3)SO_REUSEADDR选项(3.1)两个进程,绑定同一个IP和端口(3.2)TIME_WAIT状态时的bind绑定

5-4listen()队列剖析、阻塞非阻塞、同步异步

(1)listen()队列剖析
(1.1)监听套接字的队列
(1.2)accept()函数
(1.3)syn攻击
(2)阻塞与非阻塞I/O
(3)同步与异步I/O
(3.1)I/O复用
(3.2)思考题

5-5监听端口实战、epoll介绍及原理详析

(1)监听端口
(1.1)开启监听端口
(2)epoll技术简介
(2.1)epoll概述
(2.2)学习epoll要达到的效果及一些说明
(3)epoll原理与函数介绍
(3.1)课件介绍
(3.2)epoll_create()函数
(3.3)epoll_ctl()函数
(3.4)epoll_wait()函数
(3.5)内核向双向链表增加节点
(3.6)源码阅读额外说明

5-6通讯代码精粹之epoll函数实战1

(1)一个更正,一个注意
(2)配置文件的修改
(3)epoll函数实战
(3.1)ngx_epoll_init函数内容
(3.2)ngx_epoll_init函数的调用

5-7通讯代码精粹之epoll函数实战2-1

(1)ngx_epoll_process_events函数调用位置
(2)ngx_epoll_process_events函数内容
(2.1)事件驱动
(3)ngx_event_accept函数内容
(3.1)epoll的两种工作模式:LT和ET
(4)总结和测试
(5)事件驱动总结
(6)一道腾讯后台开发的面试题

5-8通讯代码精粹之epoll函数实战2-2

(1)ngx_epoll_process_events函数调用位置
(2)ngx_epoll_process_events函数内容
(2.1)事件驱动
(3)ngx_event_accept函数内容
(3.1)epoll的两种工作模式:LT和ET
(4)总结和测试
(5)事件驱动总结
(6)一道腾讯后台开发的面试题

5-9ET、LT深释,服务器设计、粘包解决

(1)ET,LT模式深入分析及测试
(2)我们的服务器设计
(2.1)服务器设计原则总述
(2.2)收发包格式问题提出
(2.3)TCP粘包、缺包
(2.4)TCP粘包、缺包解决

5-10通讯代码精粹之收包解包实战

(1)收包分析及包头结构定义
(2)收包状态宏定义
(3)收包实战代码
(4)遗留问题处理
(5)测试服务器收包避免推诿扯皮

6-1业务逻辑之多线程、线程池实战-1

(1)学习方法
(2)多线程的提出
(3)线程池实战代码
(3.1)为什么引入线程池
(4)线程池的使用
(4.1)线程池的初始化
(4.2)线程池工作的激发
(4.3)线程池完善和测试

6-2业务逻辑之多线程、线程池实战-2

6-3业务逻辑之打通业务处理脉搏实战

(1)线程池代码调整及补充说明
(2)线程池实现具体业务之准备代码
(2.1)一个简单的crc32校验算法介绍
(2.2)引入新的CSocket子类
(2.3)设计模式题外话
(2.4)消息的具体设计
(3)threadRecvProcFunc()函数讲解
(4)整体测试工作的开展
(4.1)不做背锅侠
(4.2)客户端测试代码的调整

6-4预发包,多线程资源回收深度思考-1

(1)业务逻辑细节写法说明
(2)连接池中连接回收的深度思考
(2.1)灵活创建连接池
(2.2)连接池中连接的回收
(3)程序退出时线程的安全终止
(4)epoll事件处理的改造
(4.1)增加新的事件处理函数
(4.2)调整对事件处理函数的调用
(5)连接延迟回收的具体应用

6-5预发包,多线程资源回收深度思考-2

(1)业务逻辑细节写法说明
(2)连接池中连接回收的深度思考
(2.1)灵活创建连接池
(2.2)连接池中连接的回收
(3)程序退出时线程的安全终止
(4)epoll事件处理的改造
(4.1)增加新的事件处理函数
(4.2)调整对事件处理函数的调用
(5)连接延迟回收的具体应用

6-6LT发数据机制深释、gdb调试浅谈

(1)水平触发模式下发送数据深度解释
(2)gdb调试浅谈

6-7发数据、信号量、并发、多线程综合实战

(1)发送数据指导思想
(2)发送数据代码实战
(2.1)信号量
(2.2)数据发送线程
(2.3)可写通知到达后数据的继续发送
(2.4)发送数据的简单测试
(3)发送数据后续处理代码

7-1过往总结、心跳包代码实战

(1)前面学习的总结
(2)心跳包概念
(2.1)什么叫心跳包以及如何使用
(2.2)为什么引入心跳包
(3)心跳包代码实战
(3.1)接收心跳包与返回结果
(3.2)处理不发送心跳包的客户端
(3.3)测试代码的书写

7-2控制连入数,黑客攻击防范及畸形包应对

(1)控制并发连入数量
(2)黑客攻击的防范
(2.1)flood攻击防范
(2.2)畸形数据包防范
(3)超时直接提出服务器的需求

7-3超负荷安全处理、综合压力测试

(1)输出一些观察信息
(2)遗漏的安全问题思考
(2.1)收到太多数据包处理不过来
(2.2)积压太多数据包发送不出去
(2.3)连入安全的进一步完善
(3)压力测试前的准备工作
(3.1)配置文件内容和配置项确认
(3.2)整理业务逻辑函数
(4)压力测试
(4.1)最大连接只在1000多个
(4.2)学习忠告

7-4惊群、性能优化大局观

(1)cpu占比与惊群
(2)性能优化大局观
(3)性能优化的实施
(3.1)绑定cpu、提升优进程先级
(3.2)TCP/IP协议的配置选项
(3.3)TCP/IP协议额外注意的一些算法、概念等
(4)配置最大允许打开的文件句柄数
(5)内存池补充说明

8-1结束语、课程总结

(1)课程概要总结
(2)课程技术总结
(3)项目的用途总结
(4)学习方法总结
(5)架构师之路
(6)卷2的计划
(7)再见

9-1问题1:消息的跳跃发送

问题1:消息的跳跃发送

Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户 /服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信号量 信号量集结构 信号量集函数 信号量示例 31System V信号量(二) 用信号量实现进程互斥示例 32System V信号量(三) 用信号集解决哲学家就餐问题 33System V共享内存与信号量综合 用信号量解决生产者消费者问题 实现shmfifo 34POSIX消息队列 POSIX消息队列相关函数 POSIX消息队列示例 35POSIX共享内存 POSIX共享内存相关函数 POSIX共享内存示例 Linux网络编程之线程篇 36线程介绍 什么是线程 进程与线程 线程优缺点 线程模型 N:1用户线程模型 1:1核心线程模型 N:M混合线程模型 37POSIX线程(一) POSIX线程库相关函数 用线程实现回射客户/服务器 38POSIX线程(二) 线程属性 线程特定数据 39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一个简单的线程池实现 线程池性能分析 线程池实现 网络编程, Linux
这是一门linuxc++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++linux下从事网络通讯领域/网络服务器的开发和架构工作。这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能:(1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux;(2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪;在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点:(1)项目本身是一个极完整的多线程高并发的服务器程序;(2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题;(3)根据收到的包的不同来执行不同的业务处理逻辑;(4)把业务处理产生的结果数据包正确返回给客户端;本项目用到的主要开发技术和特色包括:(1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】;(2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果;(3)线程之间的同步技术包括互斥量,信号量等等;(4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素;(5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程;(6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值