Как получить IP-адреса и порты сверстников из ответа трекера

Я пишу простой torrent-клиент в Qt, и я не понимаю, как получить IP-адреса и порты пиров из ответа трекера. Я получаю ответ успешно, но именно значение ключа peers выглядит нечитаемым

d8:completei1976e10:incompletei54e8:intervali1800e5:peers6:TQ+ГХ§e

Почему так выглядит и как сделать эти данные читабельными?

В спецификации BitTorrent сказано, что значение peers всегда отправляется в Big-Endian. Я не знаю, может ли это быть причиной нечитаемости, но я подозреваю это.

0

Решение

Как сказал Энкомб в комментариях, это BigEndian. Вы можете сделать это программно следующим образом:

QByteArray peerTmp = "TQ+ГХ§e";
QHostAddress host;
uchar *data = (uchar *)peerTmp.constData();
uint ipAddress = 0;
uint port = (int(data[4]) << 8) + data[5];
ipAddress += uint(data[0]) << 24;
ipAddress += uint(data[1]) << 16;
ipAddress += uint(data[2]) << 8;
ipAddress += uint(data[3]);
host.setAddress(ipAddress);
qDebug() << "IP" << host.toString() << ":" << port;

IP 84.81.XX.208: 37840

или если вы используете qFromBigEndian я. е.

QHostAddress peerIPAddress(qFromBigEndian<qint32>("TQ+Г"));
qDebug() << "IP" << peerIPAddress.toString();

Увидеть : http://doc.qt.io/qt-5/qtnetwork-torrent-trackerclient-cpp.html

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector