【问题标题】:HTTP GET request problemHTTP GET 请求问题
【发布时间】:2011-06-12 01:45:36
【问题描述】:

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

【问题讨论】:

    标签: c++ http tcp get


    【解决方案1】:

    您是否已确认该图像实际上正在发送给您的客户?也许你没有从服务器得到任何响应。

    尝试使用wireshark 检查实际的网络活动。这将使您确切地看到正在发送和接收的内容。有可能您没有从服务器返回任何内容,或者您​​的请求存在问题,您可以在实际网络流量中发现。

    【讨论】:

    • 我认为就是这样。发送第二条消息后,我没有收到任何回复。但我不知道为什么
    【解决方案2】:

    您没有收到任何信息,因为您在指定时告诉服务器您不想发出第二个请求

    连接:关闭

    在您的 HEAD 请求中。

    这告诉服务器你只会发出一个请求,而不是等待一秒钟。

    尝试将您的第一个请求更改为持久的“保持活动”连接。

    "HEAD /logos/2011/cezanne11-hp.jpg HTTP/1.0\r\nConnection: keep-alive\r\n\r\n";

    注意:如果您不想让服务器离开,您可能还想将第二个请求更改为保持活动状态。

    【讨论】:

      【解决方案3】:

      一般来说,HTTP 关闭套接字。 (HTTP 1.1 具有持久(保持活动)连接,尽管您似乎在第一个命令中要求服务器关闭您的连接。)

      所以请确保您的套接字在您第一次接收后仍然打开;我敢打赌它不是。

      【讨论】:

        【解决方案4】:

        按照 chrisaycock 所说的进行操作后,您可能希望将 Host: 添加到您的请求中。许多共享主机和仅 IP 访问可能会开始失败。

        【讨论】:

          猜你喜欢
          • 2012-07-10
          • 2016-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多