Qt UDP mDNS响应包,结构不正确

时间:2014-05-01 22:52:14

标签: qt qt5.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;

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

1 个答案:

答案 0 :(得分: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