我用Qt编写了简单的torrent-client,我不知道如何从追踪器响应中获取对等体的I和端口。我成功地得到了响应,但是key peers的确切值看起来不可读:
d8:completei1976e10:incompletei54e8:intervali1800e5:peers6:TQ+ГХ§e为什么它看起来是这样的,以及如何使这些数据可读?
在BitTorrent规范中,据说peers的值总是以大端字符顺序发送。我不知道这是否会成为不可读的原因,但我怀疑这一点。
发布于 2018-05-13 01:54:55
就像Encombe在评论中说的那样,它是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
https://stackoverflow.com/questions/50307278
复制相似问题