- 博客(136)
- 收藏
- 关注
原创 C/C++ Linux网络编程12 - 传输层UDP协议详解
本文介绍了网络编程中端口号与UDP协议的相关知识。首先解释了端口号的作用和划分规则(0-1023为知名端口,1024-65535为用户分配),列举了常见服务的端口号。其次详细讲解了UDP协议的特点:8字节报头结构、无连接、面向数据报、不可靠传输等特性,并分析了UDP缓冲区的工作机制(只有接收缓冲区,发送立即执行)。最后指出UDP数据包最大64KB的限制,并列举了DNS、DHCP等基于UDP的典型应用协议。文章还介绍了netstat和pidof等网络诊断工具的使用方法。
2025-12-10 20:49:38
859
原创 C/C++ Linux网络编程11 - 数据加密与https协议
本文详细介绍了HTTPS协议的安全原理及加密方案。首先对比了HTTP明文传输的安全隐患,提出HTTPS通过加密层保护数据安全。重点分析了对称加密、非对称加密的特点及组合应用,阐述了数据摘要和数字签名的验证机制。文章深入探讨了四种加密方案(仅对称、仅非对称、双方非对称、混合加密)的优缺点,最终采用对称+非对称混合加密方案。最后解释了CA证书验证机制,说明如何通过数字签名防止中间人攻击,确保服务端公钥合法性,实现端到端的安全通信。
2025-12-09 22:42:44
785
原创 C/C++ Linux网络编程10 - http协议
本文介绍了Linux网络编程中服务器设计流程和HTTP协议实现。主要内容包括:1)服务器端基本流程(socket、bind、listen等系统调用)及其在OSI模型中的层次划分;2)HTTP协议详解,包括URL结构、请求/响应格式、状态码分类、常见头部字段和请求方法;3)代码验证部分展示了如何构建简单的HTTP响应,并对比了GET和POST方法在参数传递方式、数据量限制和安全性方面的差异。文章通过ReactorTCP服务器示例演示了HTTP请求的接收处理和响应生成过程。
2025-12-07 20:20:39
1059
原创 C/C++ Linux网络编程9 -服务器的独立运行
本文介绍了如何将Linux服务器进程守护化,使其在后台持续运行不受终端影响。主要内容包括:1. 解释会话、进程组和作业的概念及关系;2. 演示通过fork、setsid等系统调用创建守护进程的步骤:两次fork确保脱离原会话组,重定向标准I/O到/dev/null,并更改工作目录;3. 提供完整的守护进程实现代码。最终实现的效果是服务器进程在xshell退出后仍能保持运行,持续对外提供服务。
2025-12-05 17:10:34
732
原创 C/C++ Linux网络编程8 - epoll + ET Reactor TCP服务器
本文介绍了基于Reactor模式和epoll边缘触发(ET)的高性能TCP服务器实现。通过connItem结构体管理文件描述符与回调函数的映射关系,实现了网络IO与业务逻辑的解耦。服务器采用非阻塞IO和ET模式,通过一次性读取内核数据减少epoll_wait唤醒次数,显著提升了性能。测试结果显示,在1000并发下QPS达到16371,优于传统epoll水平触发模式。文章详细阐述了Reactor模式的事件派发机制、ET/LT模式差异、回调函数实现等核心设计,并提供了完整的代码实现。最后通过wrk压测数据对比验
2025-11-29 21:02:53
815
原创 C/C++ Linux网络编程7 - epoll解决客户端并发连接问题
本文介绍了Linux网络编程中epoll机制的原理与实现。epoll通过红黑树管理文件描述符,配合就绪队列和回调机制,解决了select/poll频繁拷贝和线性遍历的性能问题。文章详细解析了epoll_create、epoll_ctl和epoll_wait三个核心接口,并给出了基于epoll的TCP服务器实现方案。通过性能测试对比,在2核2G服务器配置下,epoll在1000并发时QPS达16880,优于poll的16844;在极端55555并发时,epoll仍能维持3829的QPS,显示出更好的稳定性。最
2025-11-25 00:28:48
996
原创 45 C++类型转换和特殊类设计,单例模型详解
本文介绍了C++类型转换和特殊类设计。在类型转换部分,对比了C语言的强制类型转换与C++提供的四种更安全的类型转换:static_cast(相近类型转换)、dynamic_cast(多态类转换)、const_cast(去除const属性)和reinterpret_cast(重新解释内存)。在特殊类设计部分,重点讲解了单例模式的实现,包括饿汉模式(提前初始化)和懒汉模式(延迟加载),并通过互斥锁解决线程安全问题,最后展示了利用C++11特性实现的现代单例模式。文章还探讨了只能在栈或堆上创建对象的类设计方法。
2025-11-22 23:31:38
880
原创 C/C++ Linux网络编程6 - poll解决客户端并发连接问题
本文介绍了poll系统调用作为select的改进方案,用于解决Linux网络编程中的客户端并发连接问题。poll通过struct pollfd结构体管理文件描述符事件,取消了select的1024个fd限制,简化了事件集合管理,避免了每次调用时重新设置事件。文章详细展示了基于poll的TCP服务器实现,包括初始化、事件注册和事件处理循环,并提供了IO和HTTP两种服务回调函数。性能测试对比表明,poll在高并发场景下表现优于多进程/多线程方案,但和select效率相近,仍存在频繁内核拷贝和线性扫描的性能瓶颈
2025-11-21 21:35:25
1293
原创 从零构建高性能KV存储服务器:架构设计与实现细节
本项目实现了一个类似Redis的KV存储服务器,采用C++开发,主要特点如下: 架构设计: 采用Reactor模式+epoll ET模型实现高并发网络框架 模块化设计分为网络层、协议解析层和存储引擎层 支持多端口监听,单机最高支持2.8万并发连接 核心功能: 实现SET/GET/DEL/MOD/SIZE等基础KV操作 支持多种存储引擎:哈希表、红黑树、数组、LRU缓存 自定义协议处理TCP粘包问题 性能表现: QPS达到3.5万(SET/GET混合) 内存占用优化,支持千万级数据存储 通过策略模式实现存储引
2025-11-20 00:05:42
1962
原创 C/C++ Linux网络编程5 - 网络IO模型与select解决客户端并发连接问题
本文介绍了使用IO多路复用技术select()实现TCP服务器并发处理的方案。首先分析了五种网络IO模型(阻塞/非阻塞/信号驱动/IO多路复用/异步IO)的特性,重点阐述了select()系统调用的原理和参数设置。通过修改tcpServer类中的run()方法,实现基于select()的IO多路复用服务端核心逻辑:利用fd_set位图监控多个文件描述符,在有事件就绪时处理连接请求或数据读写。性能测试显示select服务器QPS达15,965,远优于多线程/多进程方案,但存在1024连接数限制、线性扫描所有f
2025-11-17 22:45:31
928
原创 C/C++ Linux网络编程4 - 解决TCP服务器并发的方式
本文介绍了两种实现TCP服务器并发处理的方法:多进程和多线程。通过fork()创建子进程管理客户端连接,并采用"孙子进程"策略避免僵尸进程问题;同时演示了使用C++11线程库实现多线程服务器的方式。文章提供了完整的代码实现,包括socket初始化、HTTP响应处理等核心功能,并通过网络调试工具和wrk性能测试对比了两种方案的效率。测试结果表明多线程方式在并发性能和资源消耗方面表现更优,同时文章也指出了高并发场景下服务器可能面临的稳定性问题。
2025-11-14 21:53:28
1319
原创 C/C++ Linux网络编程3 - Socket编程与TCP服务器客户端
本文介绍了TCP服务器与客户端的Socket编程实现。主要内容包括:1. TCP核心API:listen()设置监听队列,accept()接收连接,connect()发起连接,以及recv()/send()数据传输接口;2. TCP服务器实现步骤:创建socket、bind绑定、listen监听、accept接收连接,并通过回调函数处理IO;3. TCP客户端实现:connect连接服务器后直接通信;4. 测试示例展示了基本的客户端-服务器通信功能,并解决了连接关闭时的异常处理问题。与UDP不同,TCP需要
2025-11-13 21:55:50
1323
原创 C/C++ Linux网络编程2 - Socket编程与简单UDP服务器客户端
摘要:本文介绍了Linux下UDP网络编程的基础知识,重点讲解了Socket编程API和结构体的使用方法。文章详细说明了sockaddr、sockaddr_in和sockaddr_un三种结构体的区别及应用场景,并通过C++类封装实现了UDP服务端和客户端的完整代码。服务端需要绑定IP和端口,使用recvfrom接收数据;客户端则通过sendto发送数据,无需显式绑定端口。最后提供了本地回环地址127.0.0.1的测试方法,展示了完整的通信流程。
2025-11-12 15:20:23
941
原创 C/C++ Linux网络编程1- 网络编程基础
摘要:本文主要介绍了网络协议的分层设计思想,重点分析了OSI模型和TCP/IP协议栈的结构与功能。文章阐述了协议封装/解包机制,局域网类型(以太网、令牌环网、无线LAN)及路由器的工作原理。同时详细说明了IP地址、端口号在网络通信中的关键作用,对比了TCP和UDP协议的特性差异。最后解释了网络字节序(大端)与主机字节序(小端)的转换必要性,为网络编程提供了理论基础。(149字)
2025-11-10 19:03:09
936
原创 45 C++智能指针的原理与模拟实现,内存泄漏与RAII
本文详细介绍了C++智能指针的实现原理与应用场景。首先通过类模板封装基本智能指针,实现RAII机制的构造/析构函数和运算符重载。然后重点讲解了三种主要智能指针:auto_ptr(通过转移所有权)、unique_ptr(禁止拷贝)和shared_ptr(引用计数)。针对shared_ptr的线程安全问题,给出了基于互斥锁的实现方案。最后讨论了内存泄漏的危害和RAII思想的价值,指出智能指针能有效预防内存泄漏。文章提供了完整的代码示例,展示了智能指针如何安全高效地管理内存资源。
2025-11-04 23:27:33
898
原创 44 C++智能指针详解:安全高效管理内存
本文介绍了C++11中的智能指针,重点讲解了shared_ptr、weak_ptr和unique_ptr的使用。shared_ptr通过引用计数实现资源共享,但需注意循环引用问题;weak_ptr作为观察者不增加引用计数,可解决循环引用;unique_ptr是独占指针,不可拷贝但更安全。文章详细说明了三种智能指针的初始化方法、相关操作及注意事项,并对比了auto_ptr已被废弃的原因。智能指针基于RAII机制,能有效防止内存泄漏,提高内存管理安全性。
2025-11-03 01:16:44
963
原创 43.C++11-lambda表达式的使用
摘要: 本文介绍了C++11中的lambda表达式,重点解析其格式、捕捉列表及使用场景。lambda表达式本质是一个匿名函数,格式为capture-listmutable->return-type{statement},支持值捕捉和引用捕捉外部变量。通过示例展示了lambda作为普通函数和STL排序比较器的用法,并分析其底层原理(仿函数实现)。最后讨论了lambda表达式的拷贝问题,指出其可拷贝性取决于捕捉对象的拷贝属性。
2025-11-02 21:18:18
809
原创 Linux操作系统7- 线程同步与互斥7(RingQueue环形队列生产者消费者模型改进)
Linux操作系统中,环形队列RingQueue的进一步使用,以及通过两个互斥锁保护生产者之间的互斥与消费者之间的互斥
2025-03-25 20:10:26
1124
原创 Linux操作系统7- 线程同步与互斥6(POSIX信号量与环形队列生产者消费者模型)
Linux操作系统中信号量的使用与RingQueue环形队列实现生产者消费者模型
2025-03-24 22:24:45
1077
原创 Linux操作系统7- 线程同步与互斥5(POSIX条件变量生产者消费者模型的进一步使用)
Linux中生产者消费者模型的进一步使用,包含处理结构体数据,三线程两队列模型,多生产多消费模型
2025-03-23 19:14:12
988
原创 Linux操作系统7- 线程同步与互斥4(基于POSIX条件变量的生产者消费者模型)
Linux中使用条件变量和互斥锁实现BlockQueue阻塞队列的生产者消费者模型
2025-03-22 15:16:40
1506
原创 Linux操作系统7- 线程同步与互斥3(POSIX条件变量的使用,线程循环打印数字)
Linux操作系统中条件变量的使用,完成线程之间的同步与互斥
2025-03-21 16:11:47
1150
原创 Linux操作系统7- 线程同步与互斥2(互斥锁的原理,死锁的概念与守卫锁的使用)
Linux中互斥锁的原理与CAS,死锁的概念与基于RAII的lockguard的封装与使用
2025-03-20 14:29:17
1104
原创 36.C++哈希1(STL中unordered_set/unordered_map的使用)
C++STL无序序列式容器unordered_set/unordered_map的使用
2025-03-17 21:46:54
1014
原创 Linux操作系统6- 线程1(线程基础,调用接口,线程优缺点)
线程的概念,linux中的线程,线程库pthread,线程的资源共享与独立,线程的优缺点
2025-03-09 22:41:45
1538
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
9