0

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

  1. 访问http://pastebin.com/qPnE3jV0
  2. 编译并运行它
  3. 转到您的浏览器并输入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 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 文件的十六进制数据存储到两个数组中(为了方便修改)标题和图像数据。我试图让它在网络浏览器上提供这个 bmp。然而它失败了。

  • 我已经将 printf 放置在各处以打印服务器吐出的内容......但是我认为我错过了一些东西(可能是页脚?)。

任何帮助将不胜感激,我正在拉扯我的头发为什么它不起作用。

4

2 回答 2

0

几点:

  1. 不要使用这种奇怪的代码来写出数组。只需对数据使用 plainwrite(socket, bmpheader, sizeof bmpheader);和相同的。
  2. write()检查;的返回值 它可能会失败。
于 2011-04-14T13:16:26.803 回答
0

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

于 2011-04-14T13:19:16.357 回答