Проблема c написанным сервером, отображающим изображение bmp - PullRequest
0 голосов
/ 14 апреля 2011

Прежде всего, если кто-то захочет скомпилировать сервер и запустить его

  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 по всему место для печати, что такое сервер выплевывая ... однако я думаю, что я пропустить что-то (возможно, колонтитул?).

Буду признателен за любую помощь, я дергаю волосы за то, почему она не работает.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Заголовки должны заканчиваться two \r\n - Добавить \r\n к вашей message константе.

0 голосов
/ 14 апреля 2011

Несколько моментов:

  1. Не используйте такой причудливый код для записи массивов.Просто используйте обычный write(socket, bmpheader, sizeof bmpheader); и то же самое для данных.
  2. Проверьте возвращаемое значение write();это может потерпеть неудачу.
...