- 博客(5)
- 收藏
- 关注
原创 Reactor事件驱动的设计模式
在epoll 用法中,事件处理逻辑(比如 accept 建立新连接、recv 接收数据、send 发送数据)与 epoll 核心事件循环紧密耦合在同一个 main 函数里 —— 当 epoll 检测到 EPOLLIN 事件时,必须在循环内部通过硬编码判断:触发事件的是监听套接字(此时执行 accept),还是已连接的客户端套接字(此时执行 recv),所有逻辑混杂在一起,可读性和可维护性极差。这种设计彻底实现了 “事件触发” 与 “业务处理” 的解耦:事件循环只负责事件的监听和分发,不关心具体的业务逻辑;
2025-12-04 18:05:06
916
1
原创 http客户端请求:c++实现
/ 引入标准输入输出库,用于printf等函数// 引入字符串处理库,用于strlen、strncat等函数// 引入标准库,用于malloc、realloc、free等内存管理函数// 引入socket相关函数库,包含socket、connect等函数定义// 引入网络地址结构定义,包含sockaddr_in等// 引入IP地址转换函数,包含inet_addr、inet_ntoa等// 引入unix标准函数库,包含close、read等函数。
2025-11-14 11:57:04
313
原创 DNS协议与请求:c++实现
DNS(Domain Name System):把域名翻译成IP地址,实现DNS请求DNS 使用 TCP 和 UDP 端口 53nslookup命令,可以查到域名所对应的ip的地址打开cmd输入(可替换 别的网址 )将返回ip127.0.0.53域名解析流程:先查本地缓存(浏览器 / 系统)→ 未命中则查本地 DNS 服务器 → 本地 DNS 逐层迭代查询根 DNS→顶级域 DNS→权威 DNS → 权威 DNS 返回最终 IP,本地 DNS 缓存后回传给设备。例如:本地 DNS 要查。
2025-11-13 23:00:51
508
原创 linux网络编程-实现线程池c++
的第四个参数类型是void*(无类型指针)—— 这是 C 语言的 “通用参数” 设计:不管你要传什么类型的数据(int、结构体、指针等),都能转换成void*传进去,让能适配各种场景。所以,// 参数检查// 至少创建一个工作者线程// 初始化线程池结构体// 初始化条件变量(使用静态初始化方式)// 初始化互斥锁(使用静态初始化方式)// 创建指定数量的工作者线程int i = 0;for (i = 0;i++) {// 分配工作者线程内存return -2;
2025-11-13 14:27:22
342
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅