HarmonyOS 鸿蒙Next tcp socket 接收长消息 如何拼接?

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next tcp socket 接收长消息 如何拼接?

目前通过 tcpsocket on(“message”, callback)接收 tcp socket 消息,但是接收一个长消息会有分段问题,目前要把分几次接收的多段消息拼接为一个完整消息很恼火,方案不是很稳定,经常拼接出错。

  1. 1次tcpsocket on(“message”, callback)的 callback 收到的消息长度最长是多少?

  2. 有没有什么好的方案把多次接收到的消息稳定的拼接为一个消息?或者转为 byte stream ,以方便传业务层解析一段完整的消息内容。

3 回复

更多关于HarmonyOS 鸿蒙Next tcp socket 接收长消息 如何拼接?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


单次默认最大8192bytes,TcpSocket目前只有on(“message”)可拼接数据;

在HarmonyOS鸿蒙系统中,当你使用TCP Socket接收长消息时,由于网络传输的TCP包可能会被拆分成多个小段,因此需要在接收端进行消息拼接。以下是如何拼接长消息的基本方法:

  1. 缓冲区设计:首先,你需要设计一个足够大的缓冲区来存储接收到的数据。这个缓冲区的大小应该根据你的应用需求来确定,确保能够容纳最长的可能消息。

  2. 接收数据:在接收数据时,使用recv()或类似函数从Socket中读取数据。每次读取的数据长度可能不同,因此你需要将每次读取的数据追加到你的缓冲区中。

  3. 消息边界识别:为了确定何时一条完整的消息已经接收完毕,你需要在协议层面设计消息边界。这可以通过在消息末尾添加特定的结束符(如换行符"\n"或特定的字节序列)来实现,或者通过消息头部包含的消息长度字段来确定。

  4. 拼接消息:在缓冲区中,根据消息边界识别出完整的消息,并将其从缓冲区中提取出来进行处理。如果缓冲区中还有剩余数据,这些数据可能是下一条消息的一部分,需要保留在缓冲区中等待后续数据的到来。

  5. 错误处理:在接收和拼接过程中,需要处理可能的错误情况,如Socket关闭、读取超时等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部