【AIGC】自己定一个 TCP 帧协议:魔数、长度前缀、粘包,和一个把我救回来的全局开关

起因 2023 年写过一个 C/S 的东西:服务端 Java(Spring Boot 里嵌 Apache MINA),客户端是 C++ 写的 DLL。两边要长期连着、服务端能主动推东西下去。 HTTP 做不到这件事——至少 2023 年的我不会:服务端主动下发就得 WebSocket 或 SSE,而我要的是"一条连接上双向随便发"。所以干脆自己定协议。 ...

【AIGC】两个 2 KB 的「端口映射」工程:一个空壳,以及它教会我的两件事

两个文件,各一千多字节,同一天改的: 服务端.源码.e 1,729 字节 2016-10-02 客户端.源码.e 2,115 字节 2016-10-02 这一对我几乎可以肯定就是用来搞清楚格式的那两个文件 —— 因为在旗舰篇里,我推导长度前缀、窗体记录形状、支持库表项结构,用的全是它俩。 但也是这一对,让我推翻了自己几天前刚写下的话。 一、研究格式要找最小的标本 服务端.源码.e 1,729 字节,扫描产出 20 条串。全部列出来: 0 CNWTEPRG ← 容器魔数 20 嫉溪E突盼 ← 伪影 180 犆壕E位盼 ← 伪影 368 捞噪な协盼 ← 伪影 408 (无意义) 480 _启动窗口 ← 窗体名 493 在程序启动后自动调入本窗口 ← 窗体说明 678 服务器1 ← 控件:监听 796 捞与盼 ← 伪影 924 d09f2340818511d396f6aaf844c7e325 ← krnln 的 GUID 961 系统核心支持库 ← 唯一一个支持库 1015 窗口程序集1 1114 栗楼罚佛盼 ← 伪影 1220 躺吵恭墩r匙s ← 伪影 1324 测试端口映射.exe ← 容器里存的是带目录的全路径 1408 客户1 ← 控件:连接 1414 __启动窗口_创建完毕 ← 唯一的事件 1434 服务器1 1442 __启动窗口_创建完毕 1462 客户1 1500 锣荡E苹盼; ← 伪影 20 条里有 8 条是伪影 —— 这个比例(40%)正好也是旗舰篇里那套统计筛法要解决的问题。在小样本上,伪影不是噪音,它就是主要产出,所以你被迫把每一条都查到字节级才算读完。 ...