Bittorrent Imlementation - 解码跟踪器响应中的"peers"值



我正在尝试使用c++解码跟踪器响应中的"peers"值。

根据bittorrent协议:

peers: (binary model)不使用所描述的字典模型上面,peers值可以是由6的倍数组成的字符串字节。前4个字节是IP地址,后2个字节是端口号码。全网络(大端)表示法

我一直在尝试到目前为止这个代码:

void DecodePeers(OrderedMap<std::string, int> &map, const char * buffer)
{
    int counter = 0;
    char * peerIp = new char[5];
    char * portNum = new char[3];
    while (*(buffer + counter) != NULL)
    {
        for (int i = counter; i < counter + 4; i++)
        {
            *(peerIp + i - counter) = *(buffer + i);
        }
        counter += 4;
        *(peerIp + 4) = '';
        for (int i = counter; i < counter + 2; i++)
        {
            *(portNum + i - counter) = *(buffer + i);
        }
        counter += 2;
        *(portNum + 2) = '';
        std::string str(peerIp);
        int port = atoi(portNum);
        map.Insert(str, port);
    }
}

我的问题是这个代码给了我端口号:7643488,这显然不能是一个端口号。有人知道我做错了什么吗?

atoi (portNum);

用于将ascii/人类可读的以10为基数的字符串转换为整数类型。换句话说,您只能将字符串"00""99"放入2个字节。端口号是0-65535,这是一个uint16类型,可以容纳2个字节,不需要任何编码。

你所需要做的就是考虑字节顺序。

最新更新