C++ 如何使用字符串发送/接收Qt中带套接字的XML数据?

C++ 如何使用字符串发送/接收Qt中带套接字的XML数据?,c++,xml,qt,sockets,C++,Xml,Qt,Sockets,我有一个QtTCP服务器和客户端程序,可以相互交互。服务器可以使用Qtextstream向套接字发送一些函数生成的数据。客户端使用simple readAll()从套接字读取数据,并显示到QtextEdit 现在我来自服务器端的数据非常庞大(大约7000多个样本),我需要数据立即出现在客户端。我已经了解到,在我的情况下,使用XML将有所帮助。因此,我制作了一个QtXML服务器,它将整个XML数据生成一个.XML文件。我在客户端读取了.xml文件,可以显示它的内容。我使用DOM方法进行解析。但是,

我有一个QtTCP服务器和客户端程序,可以相互交互。服务器可以使用Qtextstream向套接字发送一些函数生成的数据。客户端使用simple readAll()从套接字读取数据,并显示到QtextEdit

现在我来自服务器端的数据非常庞大(大约7000多个样本),我需要数据立即出现在客户端。我已经了解到,在我的情况下,使用XML将有所帮助。因此,我制作了一个QtXML服务器,它将整个XML数据生成一个.XML文件。我在客户端读取了.xml文件,可以显示它的内容。我使用DOM方法进行解析。但是,只有在服务器端生成了所有7000多个样本后,我才能显示数据

我需要澄清这些问题:

  • 如何将XML服务器端的每个元素写入字符串并通过套接字发送它们?我了解了tagName()可以帮助我,但我还没有弄清楚如何帮助我
  • 除了String方法之外,还有其他方法可以让服务器端生成的单个元素出现在客户端

  • 我是个新手,请原谅我的无知。谢谢。

    大多数DOM XML解析器需要一个完整、格式良好的XML文档,然后才能使用它。这正是您所看到的:只有在收到所有样本之后,才会处理您的数据

    您需要使用一个增量解析器,它不关心XML文档是否还不完整

    另一方面:如果您不需要XML来实现与第三方系统的互操作性,那么使用它可能会浪费大量资源。我不知道您从哪里“学到”了XML“对您的情况有帮助”。对我来说,这不是学习,只是随大流而不了解发生了什么。您需要使用XML还是移动数据?几十年来,移动数据一直是一个众所周知的问题。计算机“讲”二进制。你知道,你不需要去解决这个问题。如果您只需要移动一些数字,请使用
    qdata-stream
    ,然后使用它。它将比最快的XML解析器快两个数量级,传输的数据将少一个数量级,从此以后每个人都将过上幸福的生活*


    *幸福地生活在没有保障的情况下,个人结果可能会有所不同。

    我认为XML在您的情况下不是一个好主意:XML标记会增加数据的大小。但是,7000个字符对你的计算机来说是微不足道的。那么,你确定尺寸是你的问题吗?谢谢你的洞察力。不,我不要求只使用XML,是的,我需要移动数据。现在,我的数据来自嵌入式Linux单板计算机,我的客户机是具有不同操作系统的普通用户PC。这种情况是否符合“需要XML与第三方系统进行互操作”?我正在尝试使用QDataStream,它将在任何进展时更新。如果您的软件在两端,那么除了
    QDataStream
    之外,您不需要任何东西。唯一的建议是修复您使用的QDataStream协议的版本—在接收端和发送端将其设置为相同的值。通过这种方式,您最终可以记录您发送的二进制数据是什么样子的——即使您升级了Qt版本,也可以保证保持这种状态。