イメージファイルをscket経由で送信するためにバッファにロードしようとしています。問題は、プログラムが有効なサイズのバッファを作成するが、ファイル全体をバッファにコピーしないということです。私のコードは、ファイルをチェックし、私は倍増(出力から続く画像ファイルをバッファ(gif、jpegなど)に保存しています。
//imgload.cpp
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main(int argc,char *argv){
FILE *f = NULL;
char filename[80];
char *buffer = NULL;
long file_bytes = 0;
char c = '\0';
int i = 0;
printf("-Enter a file to open:");
gets(filename);
f = fopen(filename,"rb");
if (f == NULL){
printf("\nError opening file.\n");
}else{
fseek(f,0,SEEK_END);
file_bytes = ftell(f);
fseek(f,0,SEEK_SET);
buffer = new char[file_bytes+10];
}
if (buffer != NULL){
printf("-%d + 10 bytes allocated\n",file_bytes);
}else{
printf("-Could not allocate memory\n");
// Call exit?.
}
while (c != EOF){
c = fgetc(f);
buffer[i] = c;
i++;
}
c = '\0';
buffer[i-1] = '\0'; // helps remove randome characters in buffer when copying is finished..
i = 0;
printf("buffer size is now: %d\n",strlen(buffer));
//release buffer to os and cleanup....
return 0;
}
>出力
c:\Users\Desktop>imgload
-Enter a file to open:img.gif
-3491 + 10 bytes allocated
buffer size is now: 9
c:\Users\Desktop>imgload
-Enter a file to open:img2.gif
-1261 + 10 bytes allocated
buffer size is now: 7
として、私はそれがそれぞれの画像3491と1261バイトの正しいサイズを割り当てるだことを見ることができますされてサイズウィンドウと割り当てられているサイズは正しいですが)、おそらくコピー後のバッファサイズは9と7バイトです。データ全体をコピーしないのはなぜですか?
これもすべて単純なWebsrverを実装するために行われていますが、私はこの方法で画像を送信できないようです。すべてのtext/htmlファイルは、このメソッドを使用して正常に送信されます。 – silent
HTTPプロトコルが送信するデータのタイプがわかりません。プレーンテキストの場合、イメージをMIMEコーディングでエンコードする必要があります。テキストシンボルでバイナリデータを変換するので、ファイルはE-MAILなどで送信できます。バイナリデータとして画像を送る場合は、 'Content-Type'ヘッダを変更することをお勧めします。それらについてもっと学んでください。 –
while()ループはボルケージされています。 fgetc()は、charではなくintを返します。あなたがそれを使用する方法では、EOFを正しく検出することはできません。 Ditch strlen()、それは文字列ではありません。 –