← 完整学习路线

UNIT 46 / 78 · W06-4

字节流先分帧,再连接网络

本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。

时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。

开始本单元前

NET-24完整先备 →
前一NET单元完成后再读真实24-b;原例的SIGPIPE、accept重试和截止时间局限保留。

01 / READ

先知道自己在观察什么

TCP 字节流、分包、超时与背压 →

先手推cat/hi的长度头和负载状态,再读部分I/O、EOF与一次建立的deadline。

先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。

02 / PREDICT & RUN

先留下自己的预测或独立尝试

先按[3,c]、[a,t,2]、[h,i]三段在纸上推演,再运行源码已有的逐字节和整段两种测试;区分这份手推交错与程序实际执行的分块,确认空帧与非法长度分开。

跨任意分块解析两条消息 →
源码下载与编译入口

下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →

24-a.cpp

先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。

03 / CHANGE ONE THING

通过一个变动看清原因

在副本枚举每个两段切分点,再增加逐字节输入;不改变原两条消息的含义。

修改后应观察到什么

所有切法都产生cat、hi;只有长度头但缺负载时finish拒绝。

04 / DO IT YOURSELF

换一组条件,独立解决

独立为长度上限8的解析器新增测试:空帧、单字符a、长度9、长度2但只收到a;再画与有界处理队列的交接。

用这些条件检查自己的实现

  • 空帧与a合法;超长和截断拒绝,不能把EOF当完整消息。
  • 处理队列满时不会无限积攒已解析消息;deadline不在每个字节后重置。
05 / EXPLAIN & CHECK

用证据决定是否进入下一单元

  1. send调用次数为什么不是消息数?
  2. 总截止时间与idle timeout各防什么问题?

本单元的验收依据

分块、空帧、超长、截断都有结果;先读懂解析器,再回看TCP完整示例,不要求一次记住全部POSIX API。

留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。