【发布时间】:2016-05-02 12:50:26
【问题描述】:
我必须将 xml 数据从我的电脑连续发送到我的平板电脑。 (两者都在运行窗口)
我的平板电脑应该会收到完整的 xml 文件并实时显示。
xml 文件是由每次发送的通知消息组成的。 它的类型:
<notification>
<id>1</id>
<message>hello world</message>
</notification>
使用 QTcpSocket 最简单的方法是什么?
【问题讨论】:
-
您会将永无止境的流作为单个 XML 文档发送,还是将其作为连续的连接发送多个 XML 文档?
-
除了我之前的查询,TCP 是一个 streaming 协议。流的开始是连接被接受时,连接关闭时结束。在这两者之间没有消息边界,它只是无穷无尽的数据流。
-
这是 streaming 部分,因为它是流式传输的,所以没有消息边界。您必须使用自己的协议覆盖流,该协议要么包括特定边界,要么具有包含消息长度的标头。这就是我向您询问有关 XML 文档的原因。没有结尾的单个 XML 文档很难解析,但是如果您发送较小的 XML 文档,您的消息和消息边界位于 XML 文档的开头和结尾。不需要关闭消息之间的连接,让它们在流中流动即可。
-
AS Joachim 建议您简单地接受所有数据并不断解析它。假设您正在两个标签 和 消息结束> 之间查找数据,然后您将继续读取任何传入数据,直到看到第一个标签(我猜您会在此之前丢弃任何错误的数据) .然后当你得到开始标签时,打开你的文件并将所有数据存储到你的文件中,直到你读入结束标签,然后关闭你的文件并再次开始扫描开始标签......
-
你的 cmets 很有用。你可以发布一个答案,这样我就可以投票并勾选它。
标签: c++ qt networking network-programming qtcpsocket