【问题标题】:How do I send an image over HTTP protocol in C?如何在 C 中通过 HTTP 协议发送图像?
【发布时间】:2013-01-21 14:17:25
【问题描述】:

我是一名正在做 Web 服务器练习的学生,我需要一些帮助。

我的网络服务器在文本页面上运行良好,但每当浏览器发送---GET /img.jpg HTTP/1.1 请求时,我不知道如何处理它。我听说 HTTP 协议是基于文本的,那么如何在我的 HTTP 响应中发送图像?

这是我创建正常 HTTP 响应的部分,我计划使用 readresult == 2 来表示图像。

if(readresult == 1){
    sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 200 OK", "Content-Type: text/html", "Connection: close", readpagestring);
    returnflag = 1;
}
else if(readresult == 2){
    returnflag = 2;
}
else{
    sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 404 Not Found", "Content-Type: text/html", "Connection: close", readpagestring);
    returnflag = 0;
}

以及它调用的函数

int readpage(char *readaddress, char *pagereturn){
    FILE *inputfile = (FILE *)calloc(1,sizeof(FILE));
    int flag;
    int c;
    int n = 0;
    readaddress++;
    inputfile=fopen(readaddress,"r");
    if (inputfile==NULL){
        FILE *missingfile;
        missingfile=fopen("404.html","r");
        while ((c = fgetc (missingfile)) != EOF){
            *(pagereturn+n) = c;
            n++;
        }
        flag = 0;
        fclose (missingfile);
    }
    else{
        while ((c = fgetc (inputfile)) != EOF){
            *(pagereturn+n) = c;
            n++;
        }
        flag = 1;
        fclose (inputfile);
    }
    return flag;
}

【问题讨论】:

    标签: http networking web network-programming


    【解决方案1】:

    图像数据被发送到客户端。它不会转换为文本或任何东西。如果您使用正确的内容类型,您的示例可能已经适用于图像。

    【讨论】:

      【解决方案2】:

      你必须像这样返回一个HTTP response:(非常少,你可以添加所有你需要的标题)

      HTTP/1.1 200 OK\r\n
      Content-Type: image/gif\r\n
      Content-Length: [length in bytes of the image]\r\n
      \r\n
      [binary data of your image]
      

      显然,您还必须根据图像类型设置内容类型。

      您可以使用sprintf 构建标题,然后在最后一个\r\n 之后使用memcpy 图像的二进制数据

      确保toreturn 缓冲区足够大。

      【讨论】:

        猜你喜欢
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多