繁体   English   中英

套接字消息头构建

[英]Socket message header building

我正在研究一种协议,该协议将通过tcp套接字传输xml数据块。 现在说我需要从xml文件读取所有字节并建立一个内存缓冲区。 然后,在发送实际数据字节之前,我需要将一个标头发送到另一对等端。 说我的协议使用以下标题类型。

邮件ID = 100,大小= 232,CRC = 190

string strHeader = "100,232,190"

现在,我想知道如何针对任意数量的xml数据将此标头长度固定(其他标点将其标识为标头需要固定标头长度)。 当前说我有一个283637bytes的xml文件,因此消息头看起来像。

string strHeader = "100,283637,190"

如何使它对任何大小的数据通用? 该代码同时用c ++和c#编写。

有很多方法可以做到这一点。

固定长度

您可以用前导零填充数字,以便您确切知道需要使用的文本长度。 000100,000232,000190

使用字节代替字符串

如果使用整数,则可以将字节读取为整数,而不用操纵字符串。 查看BinaryReader类。 如果需要在C ++端执行此操作,则概念仍然相同。 我确信有很多方法可以将4个字节转换为一个int。

在开头指定长度

通常在使用动态长度字符串时。 有一个指示符,指出要获取整个字符串需要读取多少个字节。 您可以将消息的前4个字节指定为字符串的长度,然后读取到该点为止。

最好的方法是将其实现为类似的结构

struct typedef _msg_hdr {
     int messageID;
     int size;
     int crc;
}msg_hdr;

这将始终具有12个字节的长度。 现在,在发送消息时,首先将标头发送给接收者。 接收者应以相同的结构接收它。 这是最好,最简单的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM