我正在尝试使用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;
然后我发送数据报,任何帮助将不胜感激。 感谢
答案 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
。