c写入服务器显示bmp图像的问题

时间:2011-04-14 13:13:58

标签: c hex bmp

首先,如果有人想编译服务器并运行它

  1. 转到http://pastebin.com/qPnE3jV0
  2. 编译并运行它
  3. 转到您的浏览器并输入http://localhost:7191/
  4. 我正在考虑的功能是:

    void serveHTML (int socket) {
    
        char *message;
        int i;
        int j;
    
        //image data
        char bmpheader[54] = {0x42, 0x4D, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    
        char bmpimagedata[36] = {0x07, 0x07, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x66, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0x46, 0x00, 0x00};
    
       message = "HTTP/1.0 200 OK\r\n"
                    "Content-Type: image/bmp\r\n"
                    "Content-Length: 90\r\n";
       printf ("%s\n", message);
       write (socket, message, strlen(message));
    
       // now send the contents of the web page to be displayed
    i=0;
    j=0;
    while (i < 54) {
        printf("%c", bmpheader[i]);
        write (socket, &bmpheader[i], 1);
        i++;
    }
    while (j < 36) {
        printf("%c", bmpimagedata[j]);
        write (socket, &bmpimagedata[j], 1);
        j++;
    }
    
    
    }
    
    • 我在这里所做的是存储十六进制 一个3x3 bmp文件的数据分成两部分 数组(为方便起见) 修改)标题和 图像数据。我尝试来获取它 在Web浏览器上提供此bmp。 然而它失败了。

    • 我把printf全部放在了 打印服务器的地方 吐出......然而我想我是 遗失了某些东西(可能是 页脚?)。

    任何帮助都会受到赞赏,我会把头发拉出来,说明为什么它不起作用。

2 个答案:

答案 0 :(得分:0)

几点:

  1. 不要使用这种奇怪的代码来写出数组。只需使用普通write(socket, bmpheader, sizeof bmpheader);和数据即可。
  2. 检查write()的返回值;它可能会失败。

答案 1 :(得分:0)

标题需要以两个 \r\n结尾 - 将\r\n附加到message常量。