Linux 学习笔记(四十二):网络编程高阶——基于状态机的 TCP 客户端断线重连 核心结论TL;DR为什么需要重连网络波动或服务器重启会导致 TCP 断开客户端需具备自愈能力。核心思路用状态机State Machine管理连接。状态定义NEW、CONNECTED、DISCONNECTED掉线、CLOSED彻底放弃。重连机制设置最大重试次数如5次和间隔如1秒超限则退出。一、 状态机设计客户端核心就是一个大while循环每次根据当前Status决定下一步行为NEW- 发起connect。CONNECTED- 执行read/write。DISCONNECTED- 执行Reconnect先重试 5 次。二、 如何检测掉线在read()时如果返回值为0说明收到了服务端的 FIN 包。此时将状态设置为DISCONNECTED交给主循环去处理重连。三、 代码实现enum class Status { NEW, CONNECTING, CONNECTED, DISCONNECTED, CLOSED }; // 重连逻辑 void Reconnect() { _status Status::CONNECTING; int count 0; while (count _max_retries) { Connect(); if (_status Status::CONNECTED) return; sleep(_retry_interval); count; } _status Status::CLOSED; // 彻底失败 }