gpt4 book ai didi

c++ - Recv 没有返回足够的字节(二进制 http 响应)?

转载 作者:行者123 更新时间:2023-11-30 03:00:35 25 4
gpt4 key购买 nike

我正在用 C++ 编写一个比特流客户端。当我的程序使用 .torrent 文件中提供的信息联系跟踪器时,它有时不会发送回足够的字节。由 bittorrent 协议(protocol)规范 (http://wiki.theory.org/BitTorrentSpecification#Tracker_Response) 定义的响应应该是一个 bencoded 字典,这意味着它应该以 'd' 开头并以 'e' 结尾。这是我用来接收和存储跟踪器响应的代码:

int iResult;
char recvBuf[512];
int recvBuflen = 512;
string response;

//Receive response from tracker
do{
iResult = recv(ConnectSocket, recvBuf, recvBuflen, 0);
if(iResult > 0){
printf(" - Bytes Received: %d\n", iResult);
response.append(recvBuf, 0, iResult);
} else if(iResult == 0){
printf(" - Connection Closed\n");
} else {
working = false;
printf(" - Failed: %d\n", WSAGetLastError());
return 1;
}
} while(iResult > 0);

这是我在 Visual Studio 中查看“监视”功能时(连接关闭后)响应字符串中的内容:

HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 399 d8:completei213e10:downloadedi139e10:incompletei17e8:intervali1970e12:min intervali985e5:peers300:Yšqö*^ýåȵµcü*—®€Éýò6¸VÉ_0ºàÉQªUºÉÆ'÷ºÉQñ½ÎâV¬ãß¾Ã,Ië{¾£é´ÈÕ½ÇMÈn½ÖQÖ¼1¼K]»k„ÎÅº× Pź|Á¶X¼ºMä¸B"‹žÆ²”Œ2œ±ªÈj°4Ìú·¯«ö'î¯+r€c¯‰“r¦Î­´Ã7Íœ"5Ä­cÿICÈ|´"”ø3yÛæÜâÕsø¿³©nŸ¤u±ýmÿ‡µmš8äScûÜ8ý–_÷

peers 之后的 300 表示 300: 之后的数据应该是 300 字节长。我将数据放在字符计数器中,结果只有 212 个字符(字节),这让我相信响应被切断了。它也不以 e 结尾。

这似乎只有在涉及二进制数据时才会发生。二进制数据是否可能包含“\0”字符的二进制文件导致它被过早切断?我该如何解决?谢谢:)

最佳答案

可能只是调试器显示字符串直到第一个空字符。您可以考虑使用 vector<unsigned char>相反,因为您在这里处理原始字节。

关于c++ - Recv 没有返回足够的字节(二进制 http 响应)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com