HarmonyOS鸿蒙Next中socket.TCPSocket发送数据成功后,一直收不到车机的响应

HarmonyOS鸿蒙Next中socket.TCPSocket发送数据成功后,一直收不到车机的响应 发送指令成功,也打印了消息发送成功,也用Wireshark抓包了iOS的包查看发送的数据,跟鸿蒙的一样,但是就是没有收到车机的响应,有人遇到过没

let hexStr = Array.from(totalData).map(byte => byte.toString(16).padStart(2, '0')).join('');
        this.tcp?.send({data: hexStr}).then((res) => {
          FileLog.info(LOG_TAG, `t${new Date()}  消息发送成功 ${bodyJson} `, this)
        }).catch((e: BusinessError) => {
          FileLog.error(LOG_TAG, `tcp GP_发送消息发生错误: ${JSON.stringify(e)}`, this)
        }).finally(() => {
          if (this.isDvr) {
            this.messageCode += 1;
          }
        })

收不到响应,没有任何打印

// 注册数据接收监听
      this.tcp?.on('message', (data) => {
        FileLog.info(LOG_TAG, 'tcp链接on message', this)

      });

更多关于HarmonyOS鸿蒙Next中socket.TCPSocket发送数据成功后,一直收不到车机的响应的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,TCPSocket发送数据后收不到车机响应,可能原因包括:网络连接不稳定、车机端未正确发送响应数据、防火墙或安全策略拦截、或Socket未正确监听接收。请检查网络状态、确认车机端处理逻辑、并确保Socket的接收回调已正确设置。

更多关于HarmonyOS鸿蒙Next中socket.TCPSocket发送数据成功后,一直收不到车机的响应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的代码和描述,问题很可能出在数据格式或接收监听的处理上。以下是几个关键排查点:

  1. 数据格式问题:你发送的是十六进制字符串(hexStr),但TCPSocket的send方法通常接受ArrayBuffer或字符串。如果车机端期望的是二进制原始数据,发送字符串可能导致协议解析失败。建议直接发送ArrayBuffer:
this.tcp?.send({data: totalData.buffer}) // 假设totalData是Uint8Array
  1. 接收监听时机:确保在连接建立后、发送数据前就已经注册了message监听。检查连接成功的回调中是否已设置监听器。

  2. 网络层验证:虽然你对比了iOS的Wireshark数据,但需要确认:

    • 鸿蒙设备与车机的网络连通性(是否在同一网络、防火墙限制)
    • 抓包确认鸿蒙设备确实发出了数据包(在鸿蒙端用tcpdump或网络调试工具)
  3. 协议一致性:确认车机要求的协议格式(如是否需要特定的消息头尾、编码格式)。字符串形式的十六进制表示可能被额外编码。

  4. 缓冲区与粘包处理:车机响应可能因缓冲区未及时读取而堆积。尝试在发送后添加延迟接收逻辑,或检查是否有数据到达但未触发事件。

建议先修改发送数据格式为二进制,并确保监听器注册正确。同时,在鸿蒙端进行网络抓包,直接验证数据是否按预期发出。

回到顶部