gpt4 book ai didi

c++ - 通过 UDP 发送 XML 数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:36 26 4
gpt4 key购买 nike

我正在编写一个程序,在输入时发送一条包含一些数据的消息。我希望能够通过多播发送一个 udp 消息,我希望能够以 xml 格式发送这个消息。目前我的程序是用 qt 编写的,如果可能的话我想保留它在 qt 中。

根据文档,我可以通过以下方式使用 udp 套接字创建和发送数据:

udpSocket = new QUdpSocket(this);
QByteArray datagram = "stuff here";
udpSocket->writeDatagram(datagram.data(), datagram.size(), groupAddress, port)

其中 groupaddress 是我要将消息发送到的 IP 地址,而 port 是我要发送消息的端口。

另一方面,我可以使用:

QXmlStreamWriter xml;
xml.setDevice(QIODevice);

向外发送xml数据,QIODevice既可以向文件发送数据,也可以通过TCP向外发送数据,并将所有数据格式化为xml格式。

但是,我无法找到一种方法来将 udpSocket 设置为 QXmlStreamWriter 的设备,并设置为在以这种方式传递数据时自动发送该数据。有没有办法做到这一点?还是我必须将所有内容格式化为字节数组才能发送出去?

编辑:以防其他人在寻找信息时偶然发现。Nejat(列为答案)描述的方法确实会通过 UDP 发送 xml 数据。但是,QXmlStreamWriter 最终会发送大量数据包,如果您尝试发送单个格式化的 xml block ,这不是很有用。如果您需要发送格式化的 xml block ,那么您需要执行以下操作:

第 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 继承自 QAbstractSocketQAbstractSocket 也继承自 QIODevice。因此,您可以将 QUdpSocket 传递给 QXmlStreamWriter 构造函数。这将允许您通过流写入设备。

来自关于QUdpSocket的文档:

If you want to use the standard QIODevice functions read(), readLine(), write(), etc., you must first connect the socket directly to a peer by calling 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();

关于c++ - 通过 UDP 发送 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com