2015-03-31 238 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