我正在研究一种协议,该协议将通过tcp套接字传输xml数据块。现在说我需要从xml文件中读取所有字节并构建内存缓冲区。然后在发送实际数据字节之前,我需要将一个头发送到其他对等端。使用下面的标题类型说我的协议。
的MessageID = 100,大小= 232,CRC = 190
string strHeader = "100,232,190"
现在我想知道如何为任何数量的xml数据修复此标头长度(其他对等体需要固定标头长度以将其标识为标头)。目前我说我的xml文件大小为283637bytes,因此邮件头看起来像。
string strHeader = "100,283637,190"
如何使其适用于任何大小的数据?代码是用c ++和c#编写的。
答案 0 :(得分:1)
有很多方法可以做到这一点。
固定长度
您可以使用前导零填充数字编号,以便准确了解需要使用的文本长度。 000100,000232,000190
使用字节而不是字符串
如果使用整数,则可以将字节读取为整数而不是操作字符串。查看BinaryReader课程。如果需要在C ++方面这样做,概念仍然是相同的。我确信有很多方法可以将4个字节转换为int。
指定开头的长度
通常在使用动态长度字符串时。有一个指示器需要读取多少字节才能获得整个字符串。您可以将消息的前4个字节指定为字符串的长度,然后读取到该点。
答案 1 :(得分:0)
最适合您的方法是将其实现为
之类的结构struct typedef _msg_hdr {
int messageID;
int size;
int crc;
}msg_hdr;
这将始终具有12个字节的长度。现在发送消息时,首先将标题发送给接收方。接收器应以相同的结构接收它。这是最好最简单的方式