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 ファイルの 16 進データを (変更の便宜上) ヘッダーと画像データの 2 つの配列に格納することです。この bmp を Web ブラウザーで提供できるようにしますしかし、それは失敗します。

  • サーバーが吐き出しているものを印刷するために、printfをいたるところに配置しました...しかし、何かが足りないと思います(おそらくフッターですか?)。

なぜうまくいかないのか、私は髪を引っ張っています。

4

2 に答える 2

0

ヘッダーは2 で終わる必要があります-定数に\r\n追加\r\nします。message

于 2011-04-14T13:19:16.357 に答える
0

いくつかのポイント:

  1. このような奇妙なコードを使用して配列を書き出さないでください。データにはプレーンwrite(socket, bmpheader, sizeof bmpheader);と同じものを使用してください。
  2. の戻り値を調べwrite()ます。失敗する可能性があります。
于 2011-04-14T13:16:26.803 に答える