2011-04-14 19 views
0

首先,如果有人想編譯服務器並運行它問題用C編寫的服務器顯示BMP圖像

  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的各地 地方打印的內容服務器 吐出......但是我想我 失去了一些東西(可能是 頁腳?)。

任何幫助將不勝感激,我拉我的頭髮,爲什麼它不起作用。

回答

0

頁眉需要結束與 \r\n - 附加\r\nmessage不變。

+0

OMG非常感謝你!所以這就是那個小混蛋。 – stockoverflow 2011-04-14 13:23:05

0

的幾點:

  1. 不要使用這樣的離奇代碼寫出來的陣列。只需使用普通的write(socket, bmpheader, sizeof bmpheader);和相同的數據。
  2. 檢查返回值write();它可能會失敗。
+0

我看過所有的寫入(除了bmp的),他們似乎給了我我想要的東西。 – stockoverflow 2011-04-14 13:20:34