我正在编写一个程序,该程序在输入时会发出带有一些数据的消息。我希望能够通过多播发送 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 块,这不是很有用。如果您需要发送格式化的 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 消息发送该数据包。您需要确保您的数据包足够小,以免在到达目的地的过程中被路由破坏。