通过 UDP 发送 XML 数据
Send XML data by UDP
我正在编写一个程序,该程序在输入时会发送包含一些数据的消息。 我希望能够通过多播发送 udp 消息,并且我希望能够以 xml 格式发送此消息。 目前我的程序是用qt编写的,如果可能的话,我想把它保留在qt中。
从文档中,我可以通过以下方法使用 udp 套接字创建和发送数据:
udpSocket = new QUdpSocket(this);
QByteArray datagram = "stuff here";
udpSocket->writeDatagram(datagram.data(), datagram.size(), groupAddress, port)
其中,组地址是我要向其发送邮件的 IP 地址,端口是我发送邮件的端口。
另一方面,我可以使用:
QXmlStreamWriter xml;
xml.setDevice(QIODevice);
发送XML数据,QIODevice可以向文件发送数据,也可以通过TCP发送数据,并以XML格式格式化所有数据。
但是,我找不到一种方法将udpSocket设置为QXmlStreamWriter的设备,并设置为在以这种方式传递时自动发送该数据。 有没有办法做到这一点? 还是我必须将所有内容格式化为字节数组才能将其发送出去?
编辑:以防其他人偶然发现这个寻找信息。Nejat描述的方法(列为答案(确实会通过UDP发送xml数据。 但是,QXmlStreamWriter 最终会发送大量数据包,如果您尝试发送单个格式化的 xml 块,这不是很有用。 如果需要发送格式化的 xml 块,则需要执行以下操作:
第 1 步:创建 udp 套接字
udpSocket = new QUdpSocket(this);
第 2 步:创建一个 QByteArray,并将其设置为 QXmlStreamWriter 正在写入的"设备"。
QByteArray message;
QXmlStreamWriter xml(&message);
//proceed to write the xml like you would normally
第 3 步:像文档状态一样发送您的 QByteArray 消息。
udpSocket->writeDatagram(message.data(), message.size(), groupAddress, port);
这样做将创建一个大的数据包,然后通过UDP消息发送该数据包。 由您来确保您的数据包足够小,以至于在到达目的地的途中不会被路由破坏。
QUdpSocket
继承自QAbstractSocket
,也继承自QIODevice
。因此,您可以将QUdpSocket
传递给QXmlStreamWriter
构造函数。这将允许您通过流写入设备。
从有关QUdpSocket
的文档:
如果你想使用标准的QIODevice函数read((, readLine((、write(( 等,必须先直接连接套接字 通过调用 connectToHost(( 到对等体。
所以你应该首先连接到一个对等体:
udpSocket = new QUdpSocket(this);
udpSocket->connectToHost(ip, port);
udpSocket->waitForConnected(1000);
QXmlStreamWriter xml(udpSocket);
xml.setAutoFormatting(true);
xml.writeStartDocument();
...
xml.writeStartElement("bookmark");
xml.writeTextElement("title", "Some Text");
xml.writeEndElement();
...
xml.writeEndDocument();
- 从 XML 中读取未指定结构的每个数据成员
- 如何在 XML 中正确存储原始字节数据并恢复它?
- 如何从客户端在 gsoap C++ 的标头中传递非 xml 数据?
- 如何通过 UDP 传输数据 (XML)?
- 如何使用TinyXML从XML文件中读取所有数据
- 如何将XML节点数据转换为QT中的字符串
- 在计算机之间发送XML数据 - Qt.
- 为 C++ 使用适当的 XML 数据类型
- 如何在 C++ 中解析 XML 字符串中的数据
- 正在更新微小Xml元素中的数据
- tcp套接字数据以xml数据包的形式发送
- 在QTcpSocket中连续发送XML数据的最简单方法
- 使 XML 数据显示在 Blackberry 10 Cascades QML 中的 listItemComponents
- 如何将复杂的指针数据作为属性放入qt-plugin-xml文件中
- 如何使用字符串在Qt中使用套接字发送/接收XML数据
- 修改xml文件中的任何数据,并通过C++程序保存带有新更改的文件
- POCO 如何发送 XML 数据
- XML Lite 解析问题 - 解析时忽略无效数据
- 代码合成XSD解析/数据绑定xml字符串,而不是xml文件
- 什么容器是管理XML数据的最佳容器