套接字消息标题构建

时间:2015-03-31 16:15:00

标签: c# c++ xml sockets

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

的MessageID = 100,大小= 232,CRC = 190

string strHeader = "100,232,190"

现在我想知道如何为任何数量的xml数据修复此标头长度(其他对等体需要固定标头长度以将其标识为标头)。目前我说我的xml文件大小为283637bytes,因此邮件头看起来像。

string strHeader = "100,283637,190"

如何使其适用于任何大小的数据?代码是用c ++和c#编写的。

2 个答案:

答案 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个字节的长度。现在发送消息时,首先将标题发送给接收方。接收器应以相同的结构接收它。这是最好最简单的方式