Golang中的TCP固定大小消息成帧方法>>

问题描述 投票:0回答:1

我无法理解使用固定大小的前缀长度标头的消息成帧的工作方式。

据说,固定大小的字节数组将包含要发送的消息的长度。但是如何定义一个固定大小的字节数组,特别是在Golang中。

说这是我的消息:

Hello

它的长度是5。

因此,如果要通过tcp流发送此消息,请确保告诉我另一端的所有消息,我必须告诉它应该读取多少字节。

一个简单的标题是length:message

5:Hello // [53 58 104 101 108 108 111]

但是如果消息长度每次增长10倍,将会有更多的字节。因此,标头大小是动态的。

36:Hello, this is just a dumb question. // [51 54 58 72 101 108 108 111 44 32 116 104 105 115 32 105 115 32 106 117 115 116 32 97 32 100 117 109 98 32 113 117 101 115 116 105 111 110 46]

所以这里36占用2个字节。

我想到的一种方法是考虑协议的最大消息长度。假设10KB = 10240字节。然后将前导0添加到消息长度。这样,我确定我将拥有一个固定的5个字节的标头。

这项工作适用于所有情况吗?

如果是,如果我收到的消息超过10KB,我应该将其分成2条消息怎么办?

如果没有,还有什么其他解决方案?

我无法理解使用固定大小的前缀长度标头的消息成帧的工作方式。据说固定大小的字节数组将包含要发送的消息的长度。但是如何...

go tcp network-protocols
1个回答
0
投票

请参阅我在这篇文章中的回答TCP client for Android: text is not received in full

© www.soinside.com 2019 - 2024. All rights reserved.