tcp套接字数据以xml数据包的形式发送

tcp socket data send in xml packet

本文关键字:数据包 套接字 数据 xml tcp      更新时间:2023-10-16

我正试图通过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#代码进行解析。任何建议或建议都会很有帮助。

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

我建议首先将数据转换为XML不是一个好方法,除非它非常重要或别无选择。这样做的原因是,在格式化XML中的值时,会增加要通过网络发送的字节数。相反,更好的方法是将值发送到另一端,并在移交给C#之前将其转换为XML。您可以使用结构方法进行发送和接收。