2013-11-22 21 views
0

我有一個Qt TCP服務器和客戶端程序,可以互相交互。服務器可以使用Qtextstream將一些函數生成的數據發送到套接字。客戶端使用簡單的readAll()從套接字讀取數據,並顯示到QtextEdit。如何使用字符串在Qt中使用套接字發送/接收XML數據?

現在我從服務器端獲得的數據非常龐大(大約7000多個樣本),我需要數據立即出現在客戶端。我瞭解到,使用XML將有助於我的情況。所以,我創建了一個Qt XML Server,並將整個xml數據生成爲一個.xml文件。我讀取了客戶端的.xml文件,我可以顯示它的內容。我使用DOM方法進行分析。但是,只有在服務器端生成了所有7000個以上的樣本時,才能顯示數據。

我需要對這些問題的澄清:

  1. 我如何寫XML服務器端的每個元素爲字符串,並通過插座給他們?我學會了tagName()可以幫助我,但我一直無法弄清楚如何。
  2. 除了String方法之外,還有其他什麼方法可以讓服務器端生成的單個元素出現在客戶端。

PS:我是新手,請原諒我的無知。謝謝。

+0

我不認爲你的情況XML會是一個好主意:XML標籤會增加你的數據的大小。但是,7000個字符是花生在您的電腦上。那麼,你確定這個尺寸是你的問題嗎? –

回答

0

大多數DOM XML解析器在它們做任何事情之前都需要一個完整的格式良好的XML文檔。這正是你所看到的:你的數據只有在收到所有樣本後才能處理。

您需要使用不關心XML文檔尚未完成的增量解析器。另一方面:如果您不需要XML與第三方系統的互操作性,則可能會浪費大量資源。我不知道你從哪裏「瞭解到」XML將「對你的情況有所幫助」。對我而言,這不是學習,只是在不知道發生了什麼事情的情況下跟蹤觀衆。您是否需要使用XML或移動數據?幾十年來,移動數據一直是一個很好理解的問題。電腦「說」二進制。你不需要解決它,你知道。如果您只需要移動一些數字,請使用QDataStream並完成它。它的速度比最快的XML解析器快兩個數量級,您將傳輸的數據量減少了一個數量級,並且每個人都會在*之後快樂地生活。 *無法保證,生活愉快,個人結果可能會有所不同。

+0

感謝您的洞察力。不,我不需要使用XML,而且我需要移動數據。現在我的數據來自嵌入式Linux單板計算機,我的客戶端是具有不同操作系統的普通用戶PC。這種情況是否符合「要求XML與第三方系統互操作」?我正在嘗試使用QDataStream,將更新任何進度。 – rNov

+0

如果你的軟件是兩端的,那麼你除了'QDataStream'外不需要任何東西。唯一的建議是*修復*您使用的QDataStream協議的版本 - 在接收端和發送端都將其設置爲相同的值。通過這種方式,您最終可以記錄您發送的二進制數據的樣子 - 儘管您升級了Qt版本,但仍將保證這種方式。 –

相關問題