Bittorrent Imlementation - 解码跟踪器响应中的"peers"值
Bittorrent Imlementation - decode "peers" value in tracker response
我正在尝试使用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个字节,不需要任何编码。
你所需要做的就是考虑字节顺序。
相关文章:
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- C++ 信号和插槽不工作:插槽不响应事件
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- C++关于ENUM的问题。我得到的响应比枚举列表大
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 cpprest (Casablanca) 返回 PDF 响应
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- 获取加密的正文响应WinHttp HTTPS
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 同步读取多个 TCP 响应
- HTTP 响应格式不正确?
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- HTTP帖子,无需等待响应
- 问题导致程序停止响应,并且姓氏未正确打印
- AT 命令响应解析器
- 将静态 IP 分配给我的 ESP32 服务器后不再响应
- 用于C++的 TCP/IP 解析器和响应器
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- Bittorrent Imlementation - 解码跟踪器响应中的"peers"值