open Harmony文件互传业务流程分析 前言我这里拿到了文件互传的双端的日志太长了就不放出来了我这里就放我自己分析的source端发送端文件传输过程详解17:06:28.695 connectionChange ← 连接状态变更已连接 17:06:28.699 SendFile in ← 开始发送文件 17:06:28.701 SendFileStub (cmd:0) ← SA服务端处理发送请求 17:06:28.702 SendManager::SendFile ← 发送管理器启动 17:06:28.703 GetTrustedDeviceList ← 获取可信设备列表 17:06:28.712 GetNetWorkId success ← 获取网络ID成功 17:06:32.624 SyncSendTask sessionId1 ← 同步发送任务会话1 17:06:32.675 OnSessionOpened_send ← 会话1建立成功 (dataType1, 控制通道) 17:06:32.732 OnMessageReceived_send ← 收到对端响应 (dataLen7) 17:06:39.015 OpenSessionAndSendFile ← 等待打开文件传输会话 17:06:40.016 waiting 2000ms ← 等待2秒 17:06:41.017 waiting 3000ms ← 等待3秒 17:06:41.748 OnSessionOpened_send ← 会话2建立成功 (dataType3, 数据通道) 17:06:41.749 OnSending → sendChange ← UI更新发送中 17:06:43.036 OnSendFileProcess ← 传输进度451644/451644 ✅ 17:06:43.037 OnSendFileFinished ← 文件发送完成 file IMG_1501837626_000.jpg 17:06:43.042 SetSendStopFlag ← 设置停止标志 17:06:43.047 Disconnect ← 主动断开连接 17:06:48.164 connectionChange ← 连接已断开双通道传输架构日志中可以清晰看到 OpenHarmony 文件互传使用了双通道架构会话sessionIddataType用途建立时间会话111 (控制通道)传输控制信令、协商17:06:32会话223 (数据通道)传输实际文件数据17:06:41流程控制通道(sessionId1)建立 → 发送协商消息(dataLen7) → 等待对端准备 → 数据通道(sessionId2)建立 → 传输文件完整流程图用户操作 系统行为 ──────── ──────── GetShareOpenTime 周期查询 ✅ ↓ 用户点击发送文件 ←─────────── StartScan 扫描设备 ↓ OnDeviceFound ×15 (发现设备) ✅ ↓ 用户选择目标设备 ←──────────── StopScan ↓ Connect → BindDevice ↓ ❌ Auth Failed (status:8) 超时 ↓ ❌ Auth Failed (status:12) 异常 ↓ (接收端用户确认连接) ←──────── authStateChange ↓ ✅ Auth Success (status:7) ↓ connectionChange (已连接) ↓ 用户选择文件发送 ←──────────── SendFile ↓ 建立控制通道 (sessionId1, dataType1) ↓ 发送协商消息 → 收到响应 ↓ 等待1s → 2s → 3s ↓ 建立数据通道 (sessionId2, dataType3) ↓ OnSending (传输中...) ↓ OnSendFileProcess 451644/451644 ✅ ↓ OnSendFileFinished IMG_1501837626_000.jpg ✅ ↓ SetSendStopFlag ↓ Disconnect (主动断开) ↓ connectionChange (已断开)Note中间组网认证失败了两次那个可能是测试那边没有在对端点确认链接导致超时了不是错误。sink端接收端完整时间线时间 事件 状态 20:03:16 CountdownTimer 开始578秒 ✅ 20:03:20~04:30 GetShareOpenTime 周期查询每5秒 ✅ 20:03:32 NAPI 模块加载 CreateShareManager ✅ 20:03:35 ConfirmConnect 确认连接 ✅ 20:03:53 authStateChange第1次 认证中 20:03:59 authStateChange第2、3次 认证中 20:04:05 connectionChange ×2 ✅ 连接建立 20:04:09 OnSessionOpened_recv sessionId1, dataType1 ✅ 控制通道建立 20:04:09 OnMessageReceived_recv 收到文件元信息 ✅ 20:04:09 OnSessionClosed_recv sessionId1 ✅ 控制通道关闭 20:04:17 OnSessionOpened_recv sessionId2, dataType3 ✅ 数据通道建立 20:04:18 OnReceiveFileStarted 开始接收文件 ✅ 20:04:18 OnReceiveFileProcess 451644/451644 ✅ 接收完成 20:04:18 OnReceiveFileFinished hash校验OK ✅ 20:04:19 Handle media asset ok 媒体入库完成 ✅ 20:04:20 OnSessionClosed_recv sessionId2 ✅ 数据通道关闭 20:04:22 加载 fileshare 模块图库应用 ✅ 20:04:32 SCREEN_LOCKED → DisableShare failed ❌ 20:04:32 ChangeUuid ×3 清理中关键细节文件接收过程控制通道---接收文件元信息20:04:09.636 OnSessionOpened_recv sessionId1, dataType1 ← 控制通道建立 20:04:09.687 OnMessageReceived_recv sessionId1, dataLen501收到的JSON消息内容{ deviceId: b5cd1e6ebc24849c, deviceName: OpenHarmony 3.2, files: [{ name: Screenshot_1501837525983.jpg, origFileName: IMG_1501837626_000.jpg, path: /mnt/hmdfs/100/account/cloud_merge_view/files/Photo/16/IMG_1501837626_000.jpg, size: 451644, uri: file://media/Photo/1/IMG_1501837626_000/Screenshot_1501837525983.jpg, utd: general.jpeg }], networkId: 3e3eac6b2808b5670dc1ae04104020bf419a8c25031cd2fae35f71377b8cc7ad, shareType: 1 }这里可以看到发送端设备名OpenHarmony 3.2文件IMG_1501837626_000.jpg451,644 字节文件类型general.jpegshareType1 表示单文件分享存储路径协商20:04:09.694 ⚠️ GetHapTokenInfo error code: 12100001 20:04:09.694 ⚠️ GetStoragePath preferences failed, return default path 20:04:09.700 storage path /mnt/hmdfs/100/account/device_view/local/files/Docs/Share前面虽然获取HAP的token信息失败但是降级处理走default成功了不影响。数据通道---文件传输20:04:17.056 OnSessionOpened_recv sessionId2, dataType3 ← 数据通道建立 20:04:17.057 OnSending → sendChange ← UI更新接收中 20:04:18.794 OnRenameFile → IMG_1501837626_000.jpg ← 文件重命名确认 20:04:18.794 OnReceiveFileStarted sessionId2 ← 开始接收 20:04:18.796 OnSending → sendChange ← UI更新 20:04:18.866 OnReceiveFileProcess 451644/451644 ← 接收进度100% 20:04:18.867 OnReceiveFileFinished sessionId2 ← 接收完成 20:04:18.867 Check recv file hash ok ✅ ← Hash校验通过 20:04:19.117 HandleMediaAsset share album id11 ← 媒体入库 20:04:19.998 Handle media asset ok ✅ ← 入库完成 20:04:20.025 OnSessionClosed_recv sessionId2 ← 数据通道关闭文件传输耗时极短从 18.794 到 18.866仅72ms就完成了 441KB 文件的接收。屏幕锁定导致disableshare失败这时候文件传输已经完毕广播停止了应该影响不大后面我问一下。20:04:32.621 OnReceiveEvent common eventusual.event.SCREEN_LOCKED ← 屏幕锁定 20:04:32.621 DisableShare in ← 尝试关闭共享 20:04:32.621 GetShareStatus (cmd:5) ← 查询当前状态 20:04:32.622 ChangeUuid ← 更新UUID 20:04:32.630 UnPublishDeviceDiscovery ← 取消设备发布 20:04:32.632 StopAdvertising publishId4082 ← 停止广播 20:04:32.633 ❌ DisableShare failed, ret 96929749 ← 关闭共享失败 20:04:32.633 ChangeUuid ← 再次更新UUID两端流程对照阶段Source发送端Sink接收端准备GetShareOpenTime 查询CountdownTimer 倒计时 GetShareOpenTime初始化StartScan 扫描NAPI加载 CreateShareManager发现OnDeviceFound ×15—连接Connect → BindDeviceConfirmConnect认证❌ Failed ×2 → ✅ SuccessauthStateChange ×3连接建立—connectionChange ×2控制通道OnSessionOpened_send (id1, type1)OnSessionOpened_recv (id1, type1)文件元信息OnMessageReceived_send (dataLen7)OnMessageReceived_recv (dataLen501)数据通道OnSessionOpened_send (id2, type3)OnSessionOpened_recv (id2, type3)文件传输OnSendFileProcess 451644/451644OnReceiveFileProcess 451644/451644传输完成OnSendFileFinished IMG_1501837626_000.jpgOnReceiveFileFinished hash ok ✅媒体入库—HandleMediaAsset → ok ✅断开DisconnectOnSessionClosed_recv后续— SCREEN_LOCKED → DisableShare failed