我正在写一个简单的下载器。我正在尝试下载 jpg 图片。
void accel::download(int threads){
char msg[] = "HEAD /logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nConnection: close\r\n\r\n";
int back = send(socketC, (const char *)&msg, strlen(msg), 0);
char *buff = new char[500];
back = recv(socketC, buff, 500, 0);
cout << buff;
char *buff2 = new char[700];
char msg2[] = "GET /logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nRange: bytes=0-400\r\nConnection: close\r\n\r\n";
back = send(socketC, (const char *)&msg2, strlen(msg2), 0);
back = recv(socketC, buff2, 700, 0);
cout << back;
}
TCP 连接已经初始化,我的代码的第一部分正在运行。它成功发送 HEAD 消息并收到响应。但是当它尝试下载图片时,recv
变为 0。这可能是哪里出了问题?
顺便说一句,这是学校项目,所以我不允许使用一些花哨的库来执行此操作。这是完整的图片地址 - http://www.google.com/logos/2011/cezanne11-hp.jpg
最佳答案
你没有收到任何东西,因为你告诉服务器你不想在指定时发出第二个请求
Connection: close
在您的 HEAD 请求中。
这会告诉服务器您只需发出一个请求,无需等待一秒钟。
尝试将您的第一个请求更改为持久的“保持事件”连接。
"HEAD/logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nConnection: keep-alive\r\n\r\n";
注意:如果您不想让服务器消失,您可能也想将第二个请求更改为保持事件状态。
关于c++ - HTTP GET请求问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740927/