[英]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.