2

我正在尝试使用 QUdpSocket 发送一个正确的 mDNS 响应数据包。我遇到的问题是正确创建数据包。有人可以告诉我把数据包放在一起的正确方法吗?

到目前为止,这还没有奏效:

    QByteArray datagram;
    QDataStream out(&datagram, QIODevice::WriteOnly);
out << 0x8400; //set standard query

    out << 0; //Reply code: no error;
    out << 0; //Questions; 0
    out << 0; //Answers; 0
    out << 1; //Authoritive answers: 0
    out << 0; //Additional RR;

    QByteArray name("_home-sharing._tcp.local");
    out <<  name;
    out << 0x000c; //PTR
    out << 1;//Class: IN
    out << 1;//Cache Flush
    out << 0; //Time to Live: 0;

然后我发送数据报,任何帮助将不胜感激。谢谢

4

1 回答 1

0

QDataStream编码为特殊的 Qt 格式,它不会格式化为“原始”二进制文件。

您需要自己序列化数据。我建议只附加到QByteArray. 例如,要序列化uint16_t网络字节顺序,您可以使用如下函数:

void appendUint16NBO(QByteArray& ba, uint16_t i)
{
  ba.append(char((i >> 8) & 0xFF));
  ba.append(char(i & 0xFF));
}

您将按如下方式使用该函数:

QByteArray datagram;
appendUint16NBO(datagram, 0x0000);
appendUint16NBO(datagram, 0x8400);

然后QByteArray将包含:00 00 84 00.

于 2014-05-02T12:02:27.127 回答