6

私は Web サーバーの演習を行っている学生で、少し助けが必要です。

Web サーバーはテキスト ページに対して正常に動作していますが、ブラウザーが要求を送信するたびに、---GET /img.jpg HTTP/1.1それを処理する方法がわかりません。HTTP プロトコルはテキスト ベースだと聞きましたが、HTTP 応答で画像を送信するにはどうすればよいですか?

これは、通常の HTTP 応答を作成するセグメントreadresult == 2です。イメージを通知するために使用する予定です。

if(readresult == 1){
    sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 200 OK", "Content-Type: text/html", "Connection: close", readpagestring);
    returnflag = 1;
}
else if(readresult == 2){
    returnflag = 2;
}
else{
    sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 404 Not Found", "Content-Type: text/html", "Connection: close", readpagestring);
    returnflag = 0;
}

そして、それが呼び出す関数

int readpage(char *readaddress, char *pagereturn){
    FILE *inputfile = (FILE *)calloc(1,sizeof(FILE));
    int flag;
    int c;
    int n = 0;
    readaddress++;
    inputfile=fopen(readaddress,"r");
    if (inputfile==NULL){
        FILE *missingfile;
        missingfile=fopen("404.html","r");
        while ((c = fgetc (missingfile)) != EOF){
            *(pagereturn+n) = c;
            n++;
        }
        flag = 0;
        fclose (missingfile);
    }
    else{
        while ((c = fgetc (inputfile)) != EOF){
            *(pagereturn+n) = c;
            n++;
        }
        flag = 1;
        fclose (inputfile);
    }
    return flag;
}
4

2 に答える 2

14

次のように返すHTTP response必要があります: (非常に最小限で、とにかく必要なすべてのヘッダーを追加できます)

HTTP/1.1 200 OK\r\n
Content-Type: image/gif\r\n
Content-Length: [length in bytes of the image]\r\n
\r\n
[binary data of your image]

明らかに、画像のタイプに応じてコンテンツ タイプも設定する必要があります。

を使用してヘッダーを作成しsprintfmemcpy最後の直後の画像のバイナリ データを作成できます。\r\n

toreturnバッファーが十分な大きさであることを確認してください。

于 2013-02-06T11:47:00.450 に答える
1

画像データをクライアントに送信します。テキストなどには変換されません。正しい content-type を使用する場合、例はおそらく既に画像に対して機能します。

于 2013-02-06T11:45:20.813 に答える