- 博客(36)
- 问答 (1)
- 收藏
- 关注
原创 【网络编程】什么是 DPDK?
用户态驱动:省掉了内核的繁琐逻辑。大页内存:保证网卡和 CPU 访问内存更快。轮询:少了中断延迟。零拷贝:少了数据搬运。最终结果就是:👉数据包从网卡到应用的路径被极度压缩,性能自然就飞起来了。在传统 Linux 上,处理一个数据包可能需要几微秒甚至更多,而在 DPDK 上只需要纳秒级别。吞吐量可以轻松跑满 10Gbps、25Gbps、甚至 100Gbps 网卡。DPDK 是什么?👉 它是一套用户态的高速网络数据平面库,让你可以绕过内核协议栈,直接和网卡打交道,从而实现极致的收发包性能。
2025-09-29 15:20:20
1080
原创 函数之间跳转的实现方式详解:setjmp/longjmp、ucontext 与汇编
在 C 语言及系统编程中,程序的执行流通常是自上而下、函数调用有严格的栈结构。但有时我们希望,实现从一个函数跳转到另一个函数,甚至在不同栈上下文之间切换。—— 非局部跳转。ucontext—— 用户级上下文切换。内联汇编 —— 直接操作寄存器和栈。
2025-09-13 10:12:58
1178
原创 【网络编程】TCP、UDP、KCP、QUIC 全面解析
KCP 相当于“用户态的 TCP”,但比 TCP 更灵活、更可调。它依赖应用层定时驱动(kcp_update),不像 TCP 那样完全交给内核。在低延迟、对网络质量敏感的场景(游戏、语音、远程访问)里,KCP 往往比 TCP 表现更好。
2025-09-11 20:41:13
1209
原创 基于 Reactor 模式的高并发 WebSocket Server 实现
Reactor 模式Reactor:事件分发器,负责监听和分发事件(如acceptreadwriteHandler:事件处理器,根据事件类型执行相应的业务逻辑。:事件多路复用器(如epollselectpoll),负责监控多个连接的状态。一句话概括:Reactor 模式就是用一个线程/少量线程,监听所有 socket 的事件,并分发给对应的处理函数。
2025-09-09 10:11:44
1471
原创 【网络编程】recv函数的本质是什么?
recv的本质是 “从内核缓冲区复制数据到用户缓冲区”,它不直接接收网络数据,只是完成 “内核→用户” 的内存复制。“调用recvrecv能读到的数据,必然已经先到达了内核缓冲区(本端操作系统的内存),recv只是完成最后一步搬运。这个设计是操作系统 “分层隔离” 思想的体现 —— 内核负责与硬件交互,用户程序负责业务逻辑,recv则是连接两者的 “数据搬运工”。
2025-09-08 20:55:49
545
原创 用 epoll 实现的 Reactor 模式详解(含代码逐块讲解)
在高并发网络编程中,如何高效地处理大量连接是一个核心问题。传统的阻塞 I/O 或者“一连接一线程”的模型,在线程数和上下文切换上会造成巨大的开销。为了解决这些问题,应运而生,它结合了 I/O 复用技术(如epoll),成为构建高性能服务器的常见架构。本文将从入手,结合一段基于epoll的 C 语言实现代码,详细讲解。
2025-09-05 19:58:19
742
1
原创 基于 epoll 的高并发服务器原理与实现(对比 select 和 poll)
特点selectpollepollfd 数量限制1024无固定上限无固定上限用户态/内核态拷贝每次都要每次都要只需一次(注册时)时间复杂度O(n)O(n)O(1)(只返回就绪 fd)并发性能一般一般高效(适合上万连接)
2025-09-04 21:27:31
824
原创 基于 poll 的多路复用网络编程详解
这段代码通过poll实现了一个简易的多客户端回显服务器poll 的作用是同时监视多个 fd 的事件。代码流程是:监听 socket → poll 等待 → accept 新连接 → recv/send 客户端数据。和 select 相比,poll 更加灵活,能支持更多连接。
2025-09-04 16:01:55
905
原创 基于 select 的多路复用网络编程详解
在网络编程中,服务端需要同时处理多个客户端的连接请求。最简单的方式就是服务器accept()一个连接后,就进入循环recv()读取数据。如果一个客户端迟迟不发数据,整个线程就会一直阻塞在recv()上。:每个客户端连接创建一个线程,独立处理。:用一个线程,通过统一管理多个 socket。本文通过一个小例子,演示如何使用select实现高效的 I/O 多路复用。
2025-09-04 09:53:09
785
原创 基于 Socket 和多线程的简单 Echo 服务器实现
创建 TCP 服务器 Socket(绑定本地 2000 端口)。监听客户端连接请求。每当有客户端连接,就创建一个线程专门负责和该客户端通信。通信逻辑:客户端发来什么消息,服务器就原样返回什么。也就是说,这是一个最简单的多线程 TCP Echo 服务器。这段代码实现了一个最小可用的多线程 TCP Echo 服务器,主要用来理解:Socket 的创建与绑定。accept 的作用(连接建立)。recv/send 的通信逻辑。pthread 的多线程处理。
2025-09-03 15:05:34
983
原创 【C语言网络编程基础】TCP并发网络编程:io多路复用
在高并发场景下,传统的“一请求一线程”模型面临着线程开销大、上下文切换频繁的问题。为了解决这个瓶颈,本文介绍一个基于的 TCP 服务器实现。它通过同时监听多个连接 socket,从而实现轻量级并发处理,显著提升服务器性能。
2025-07-28 21:14:35
643
原创 【C语言网络编程基础】TCP并发网络编程:一请求一线程模型
在实际开发中,一个 TCP 服务器往往要同时为多个客户端提供服务。最简单直观的方式,就是采用“一请求一线程”模型 —— 每当有客户端连接进来,服务器就创建一个新线程专门负责这个客户端的收发任务。本文将介绍如何使用实现一个并发 TCP 服务器。
2025-07-28 16:04:36
746
原创 【C语言网络编程基础】DNS 协议与请求详解
DNS 是互联网的电话簿。用户输入网址(域名)时→它是一个分布式、层级结构的命名系统,负责解析所有公共域名。DNS 是互联网的基础设施之一,支撑着网站访问、邮件传输等各类服务。理解 DNS 协议和请求过程,不仅有助于调试网络问题,也是学习网络编程、安全防护等高级技能的第一步。
2025-07-27 21:29:41
650
原创 【C语言网络编程基础】TCP 服务器详解
TCP 服务器是运行在某个端口上的网络程序,用于接收客户端的连接请求,并与之进行数据通信。它主要负责:等待并接收客户端的连接请求与客户端建立可靠的双向通信通道持续收发数据,直到任意一方关闭连接TCP 服务广泛应用于:Web 服务器(HTTP)、文件传输(FTP)、远程登录(SSH)等。TCP 服务器是网络服务中的重要组成部分,它通过建立连接、稳定通信,为客户端提供可靠的数据传输通道。理解其基本流程,是学习网络编程不可或缺的一步。如果你打算继续深入,可以尝试了解:多线程 TCP 服务器。
2025-07-27 21:21:29
890
原创 【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
在浏览器中,我们输入网址点击回车,就可以打开网页。那么这个过程中到底发生了什么?其实背后就是浏览器作为,向服务器发起了一个。本篇博客将手把手用纯 C 语言实现一个简洁版的“浏览器行为”:输入域名和资源路径使用 Socket 建立 TCP 连接构造并发送 HTTP GET 请求接收服务器响应内容(HTML 页面)打印到终端。
2025-07-27 20:36:06
1086
原创 【C语言网络编程】HTTP 客户端请求(发送请求报文过程)
在 C 语言中,我们可以使用 socket 编程来手动实现一个简单的 HTTP 客户端,像浏览器一样请求网页数据。本文将结合实际代码,重点讲解如何通过 C 语言构造并发送一个 HTTP 请求报文,实现与服务器的基本通信。
2025-07-16 20:52:54
590
原创 【C语言网络编程】HTTP 客户端请求(域名解析过程)
host_to_ip在做 C 语言网络编程或模拟 HTTP 客户端时,第一步就离不开“”这一步。很多人可能直接复制粘贴一段的代码,但未必真正理解它的原理。深入剖析,并进一步带你了解 HTTP 请求是如何基于 TCP 通信进行的。
2025-07-11 16:38:57
452
原创 C语言手写简易 DNS 客户端(接收部分)
本文通过纯 C 语言手动构造 DNS 请求报文,使用 UDP 协议发送到公共 DNS 服务器,并接收响应,完整演示 DNS 请求流程。
2025-07-10 21:15:37
457
原创 C语言手写一个简易 DNS 客户端
本文聚焦讲解如何通过 C 语言构造并发送一个最小化的 DNS 请求,特别以函数为主线,带你一步步理解 DNS 请求的构造过程。
2025-07-10 15:42:38
1012
原创 C语言实现DNS客户端 | 详解dns_create_question函数的设计与实现
int length;// DNS问询字段总长度(包括name部分)// 查询类型,一般为A记录(0x0001)// 查询类,一般为IN(0x0001)// 按DNS格式编码后的域名DNS 协议中对域名的编码方式不同于普通字符串。例如:解释如下:每个标签前添加一个长度字节(如"www"长度为 3)标签本体("www", "example", "com")最后以一个 0 字节结尾,表示域名结束。
2025-07-09 21:22:25
541
原创 【网络编程】DNS协议解析与C语言DNS请求头结构体设计详解
DNS(Domain Name System,域名系统)是因特网的“电话簿”,用于将域名映射为IP地址,典型的解析过程是:客户端构造DNS请求报文,发送至DNS服务器;服务器解析域名,返回对应IP地址或其他资源信息;客户端获取结果,完成连接或其他操作。DNS协议基于UDP协议,使用端口号53。报文格式包含请求头、问题部分、应答部分等多个结构,下面我们详细拆解。本文通过C语言结构体讲解了DNS协议的基本构成与域名查询流程,适合网络编程、协议分析爱好者入门理解。
2025-06-28 18:54:18
731
原创 使用 C 语言操作 MySQL 实现图片写入与读取
在实际项目中,常常需要将图片或文件以二进制方式存储至数据库中,并能正确读取还原为文件。本文以 C 语言配合 MySQL C API 为例,完整演示如何实现将一张 JPG 图片写入数据库并再读出生成新图片文件的过程。
2025-06-28 11:08:07
656
原创 C语言操作MySQL之BLOB字段插入:详解mysql_write()函数实现过程
在 C 语言中操作 MySQL 时,插入文本、数值字段相对直观。但当我们遇到图像、音频等大二进制数据(BLOB)时,直接执行 SQL 语句就显得力不从心了。这时,就需要借助提供的(预处理语句)机制。
2025-05-30 13:24:09
516
原创 C语言操作MySQL的同时读写图片(二进制文件)
在进行库开发时,我们经常会碰到需要处理图片或其他二进制数据的场景。在 C 语言中,由于没有现成的高级库支持图片处理,最直接的方式就是以**二进制文件(Binary File)**的形式来读写图片。read_image和,它们用于实现图片文件的读取和写入,为后续将图片存储至数据库或从数据库中取出做准备。
2025-05-29 21:40:02
891
原创 使用C语言+MySQL存储过程实现数据库删除功能
避免 SQL 宏定义中出现换行和复杂控制逻辑导致编译失败或语义错误。逻辑集中封装,便于复用和维护。动态传参删除更安全、灵活。
2025-05-22 13:15:39
652
原创 C语言实现线程池:从原理到实战(附完整源码)
线程池是一种线程使用模式。线程池中包含多个线程,这些线程在没有任务时处于等待状态。一旦有任务加入线程池,调度器就会将任务分配给空闲的线程执行。优点包括:降低线程创建/销毁的资源开销;避免线程过多导致系统资源耗尽;实现任务排队处理,提高系统响应能力。
2025-05-18 11:08:22
839
原创 【C语言操作MySQL】实现基本的插入和查询(含mysql_real_query使用详解)
已在Linux系统中安装MySQL服务;已创建好数据库、表和对应的用户账号;
2025-05-17 20:55:46
665
原创 Linux系统下安装MySQL并使用MySQL Workbench连接的完整流程
本文介绍如何在 Ubuntu Linux 系统上安装 MySQL 数据库,并通过图形化工具 MySQL Workbench 进行连接与管理。适合初学者使用。
2025-05-14 18:42:29
2181
原创 C语言实现通讯录管理系统(支持文件保存与加载)
新增联系人:输入姓名和电话,添加到通讯录。删除联系人:根据姓名查找并删除联系人。查询联系人:根据姓名搜索联系人,显示其电话。打印通讯录:遍历并输出所有联系人。保存到文件:将当前通讯录内容保存至指定文件。从文件加载:读取指定文件中的联系人数据,恢复通讯录。支持层:主要负责底层的数据操作,如内存管理、文件读写和数据解析。接口层:提供与外界交互的接口,负责用户输入的处理,并将其转化为业务操作。业务层:实现系统的核心逻辑,如联系人数据的增删查改等。这种分层结构使得系统更加模块化,易于维护和扩展。
2025-04-28 13:31:58
1279
原创 使用内联汇编实现CAS操作(含详细讲解)
CAS(Compare And Swap,比较并交换)是一种无锁的同步机制。它的基本思想是先比较内存中的值是否是自己期望的,如果是,就交换成新值;否则,不做任何操作,并通知调用者。这样可以保证只有看到的值没被别人改过时,自己的修改才生效,否则就要重新尝试。这是一种非常高效的并发控制手段,常见于操作系统、数据库、JVM等系统中。
2025-04-28 09:53:21
1253
原创 多线程同步:互斥锁、自旋锁与原子操作讲解(附代码示例)
方式适用场景优点缺点普通操作单线程环境简单,快速多线程下出现竞争条件互斥锁多线程+临界区长简单,保护性强可能引发线程挂起,调度开销大自旋锁多线程+临界区短快速避免阻塞高CPU占用,易造成性能问题原子操作极短操作(如计数器)极高性能功能有限,复杂逻辑不适用。
2025-04-27 16:34:52
1065
原创 理解 C 语言中的二级指针(指向指针的指针)
操作类型需要的指针层级是否能修改原始变量修改值(如 int)int *✅ 是修改指针本身int **✅ 是仅传一级指针int *❌ 否(无法改其指向)
2025-04-22 20:35:54
431
原创 C语言多线程 pthread_create 的用法详解与示例
最近在学习pthread多线程编程,遇到了函数的使用问题,结合一段简单代码做了一些总结,分享给大家,帮助理解线程函数的写法、参数传递方式以及多线程运行的基本机制。
2025-04-22 15:05:41
914
空空如也
关于数据结构复习遇到的问题
2021-12-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅