2015-03-31 154 views
0

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

[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#代码解析。任何建议或建议将失去很大的帮助。

+0

客户端的OS /平台是什么? – 2015-03-31 19:08:54

+0

只需使用像xerces这样的常规xml库。 Google xml解析C++。对于小文件如果文件非常大,那么DOM是很好的,那么你需要一个SAX解析器。 – 2015-03-31 19:14:04

+0

平台是Windows。 – hypheni 2015-03-31 19:54:07

回答

0

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

0

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

+0

其实事实就是,如果数据没有格式化成xml服务器就不会得到数据的线索是什么。 – hypheni 2015-04-01 08:26:58

+0

您可以定义消息类型。例如,如果我们在谈论医院情况,并且通过网络发送图像,我们会发送一个类型标识符,告诉我们它的病人照片,处方快照或实验结果 – 2015-04-01 08:46:03