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



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

  1. 转到http://pastebin.com/qPnE3jV0
  2. 编译并运行打开浏览器,输入http://localhost:7191/

我特别关注的函数是:

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 OKrn"
                "Content-Type: image/bmprn"
                "Content-Length: 90rn";
   printf ("%sn", 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的所有用于打印服务器的位置吐出……不管我怎么想缺少一些东西(可能是a)页脚?)。

任何帮助都将是感激的,我真不明白为什么它不工作。

标题需要以两个 rn -将rn附加到message常量

几点说明:

  1. 不要用这种奇怪的代码来写数组。只使用普通的write(socket, bmpheader, sizeof bmpheader);和相同的数据。
  2. 检查write()的返回值;

最新更新