c++ - HTTP GET请求问题

标签 c++ http tcp get

我正在写一个简单的下载器。我正在尝试下载 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/

相关文章:

c++ - Qt QOpenGLWidget wheelEvent 奇怪的行为

c++ - 如何在 DdeCallback 函数中实现返回码

java - HttpURLConnection Post 请求,使用来自 javax.rs.ws.Response 对象的响应进行响应

class - 无类 Dart 文件的目的是什么?

c++ - 非阻塞选择()?

c++ - 为什么指针的内容会改变?

c++ - 这个程序不是要求数组中预先确定的 5 个数字吗?

asp.net - HTTP POST 不适用于 Internet Explorer 8(重定向后)

amazon-web-services - AWS NLB 是否在终止 TLS 时传递 SNI 值? (通过 SNI 路由)

c - Linux TCP 服务器,每 X 秒向几个客户端发送 RAW 数据