TCP通信における構造体メンバの配列へのファイル読み込みについて質問します。
TCPでビットマップと数値を送信するプログラムを作りました。
ネットを参考に下のプログラムを作り実行した結果、①の返り値は2500018を返しますが、受け取ったビットマップファイルには何も入っていませんでした(ファイルサイズ2.5M程度)。
そこで、②の返り値を見ると'0'でした。また、③の値は'19'でした。
〇質問
1.④で2.5Mのビットマップを読み込ませるために構造体(bmpfile[])のサイズを変えているのですが、この方法ではサイズの変更はできないのでしょうか。
2.もし質問1の方法が正しいとしたら、なぜ③でサイズ変更前の値が返ってくるのでしょうか。
3.①及び②の関数(send, fread)への引数への代入はこれで正しいでしょうか。
〇環境
OS:windouws7(SP1) 32ビットOS
開発:visual C++(2008)
メモリ:4GB
CPU:2.5GHz
〇プログラム
★struct.h
struct BMP_PIC{ unsigned short marker;//①マーカー unsigned long size;//②データバイト数 unsigned short tp;//③ヘッダ種別 unsigned short no;//④ヘッダ番号 float x;//数値1 float y;//数値2 unsigned char bmpfile[1];//ビットマップ用の配列(2.5Mを読み込ませる) } ;
★tTCP.cpp:
FILE *BMPFP; #define BMPTEST ".\\pic.bmp" BMPFP = fopen(BMPTEST, "rb"); struct BMP_PIC *m_BmpPic; fpos_t sz; fseek(BMPFP, 0, SEEK_END); fgetpos(BMPFP, &sz); m_BmpPic = (struct BMP_PIC *)malloc(sizeof(struct BMP_PIC) - 1 + sz);//④ m_BmpPic.marker = 0xABCD; m_BmpPic.size = sz + 8;//・・・実際のデータ(ビットマップ + 数値1 + 数値2)サイズを指定する。 m_BmpPic.type = 0; m_BmpPic.no = 0; m_BmpPic.x = 1000; m_BmpPic.y = 2000; sizeof(*m_BmpPic);//③ fread(m_BmpPic->bmpfile, 1, sz, BMPFP);//② send(s1, reinterpret_cast<const char*>(m_BmpPic), sz + 18, 0);//① free(m_BmpPic); fclose(BMPFP);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。