Пакет ответа Qt UDP mDNS, не структурированный верно
Я пытаюсь отправить правильный ответный пакет mDNS с помощью QUdpSocket. Проблема в том, что я правильно создаю пакет. Может кто-нибудь, пожалуйста, покажите мне правильный способ собрать пакет.
Пока что это не сработало:
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 ответ
Решение
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
,