Repository navigation
v0.4.2
Com Bridge v0.4.2
剪贴板从"只能搬文字"扩展到文字 / 图片 / 文件,并把传输方式按 Deskflow 的成熟做法重做。
新增:跨机复制图片
截图(Win+Shift+S)、画图板、看图软件里的图,在一台机器上复制,到另一台直接
Ctrl+V 就能用。
图片按 Deskflow 的规范传裸 DIB(BMP 去掉 14 字节文件头,BI_RGB),写进对端
剪贴板时直接 SetClipboardData(CF_DIB) —— 与 Deskflow 的 MSWindowsClipboardBitmapConverter
完全一致。这样粘贴到 Word / 微信 / 画图都能识别,不需要中间转码。
(旧版其实也尝试过同步图片,但把图塞进 8MB 的 UDP 通道:1080p 截图 8.3MB 就传不动,
4K 截图 33MB 更是必然失败。见下面的传输改动。)
新增:跨机复制文件与文件夹
在资源管理器里复制文件(或整个文件夹),到另一台机器 Ctrl+V 就能落盘:
- 文件夹会连目录结构一起还原(相对路径保留)
- 单次上限 2GB,接收目录是
%LOCALAPPDATA%\ComBridge\received\<时间戳>\,
只保留最近 30 批(避免磁盘无限增长) - 粘到哪里由你决定:程序只是把文件放进一个目录并把路径写进剪贴板,
不会执行任何东西
传输改造:从 UDP 换成 TCP(对齐 Deskflow)
原来剪贴板走 UDP,1000 字节一块、逐字节位图重组、上限 8MB。那是给小文本设计的,
图片和文件在这条路上必然丢包。
读了 Deskflow 的 StreamChunker.cpp 之后按它的做法重做:
| 方面 | Deskflow | 本版 |
|---|---|---|
| 传输 | TCP 客户端流 | 单独一条 TCP 通道(端口 24803) |
| 分块 | g_chunkSize = 512KB,start/data/end 三标记 |
同 |
| 序列化 | u32 格式数 + (u32 id + u32 长度 + 数据) |
同,格式 id 同值(Text=0/HTML=1/Bitmap=2) |
| 防回环 | 注册 "Deskflow Ownership" 剪贴板格式 |
注册 "Com Bridge Ownership" |
顺带说明:Deskflow 的拖放文件传输其实已经废弃(ProtocolTypes.h 里
kMsgDFileTransfer / kMsgDDragInfo 都标着 "no longer implemented"),所以文件
这部分只沿用它的消息语义(先发清单、再按文件逐个发内容),传输本身走同一条 TCP 通道。
安全边界(接收侧强制,不信对端)
- 路径消毒:拒绝
..、绝对路径、盘符、Windows 保留名(CON/PRN…)、超深路径; - 总量上限:剪贴板内容 96MB、文件 2GB、文件数 4000;
- 落盘位置固定在
received\<时间戳>\,不覆盖你已有的文件; - 只写文件 + 设剪贴板,不执行。
升级注意
两台机器都要换成本版 —— 剪贴板的传输方式变了(UDP → TCP),新旧版本混用时
剪贴板不会工作(日志里会有连接被拒/无确认的提示),键鼠和音频不受影响。
全部测试
744 项通过。新增 51 项覆盖:序列化往返、未知格式跳过、路径消毒(含敌意 ..)、
目录展开与重名改名、端到端(文字 / 4MB 级 DIB / 带子目录的文件组)、上限拒收、
发送队列保序。