tcp套接字数据在xml包中发送

时间:2015-03-31 19:06:55

标签: c# c++ xml sockets

我正在尝试通过tcp套接字发送一些数据。现在的问题不是发送简单的char *数据,而是需要缓冲一些数据并在那里创建一个xml数据包结构,因此通过网络发送xml数据。例如,我有一个ini文件将所有数据读入相应的变量。说:

[Device data ini]

DeviceID = 0042
Manufacturer = Company Name
VendorID = 00-291-647
Timestamp = 2014-08-13 12:40:11

现在我需要从上面的数据中创建xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<DataBlock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <DeviceID>0042</Device>
    <Manufacturer>Company Name</Manufacturer>
    <VendorID>00-291-647</VendorID>
    <TimeStamp>2014-08-13 12:40:11</TimeStamp>
</DataBlock>

将这些全部数据作为char *发送到服务器。从简单的char *数据结构构建xml数据包的最佳方法是什么。代码将用c ++编写,xml将在服务器端用c#代码解析。任何建议或建议都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

使用任何C ++标记生成器来分割输入/源数据,以便分别处理每一行(使用\r\n作为分隔符)。 例如,您可以使用boost::split来执行此操作。之后,每行使用相同的技术来提取键和值(使用=作为分隔符)。您可以将解析后的密钥和值放到std::map,因为您在下一步需要它们。最后一步 - 使用解析数据简单地格式化目标xml字符串。为此,您需要遍历地图元素并格式化结果字符串。您还可以为每个属性使用带有占位符的XML模板字符串,并将其替换为已解析的值。

答案 1 :(得分:0)

我建议首先将数据转换为XML不是好方法,除非它非常重要或没有其他选择。原因是当您在XML中格式化值时,您将增加通过网络发送的字节数。取而代之的是,更好的方法是将值发送到另一端并将其转换为XML,然后再移交给C#。您可以使用结构方法进行发送和接收。

相关问题