TCP通信について勉強し始めて日が浅い者です。
数値とビットマップ画像をTCPで送るプログラムを作成しています。
数値は正常に受け取り表示ができました。
しかし、ビットマップについては小さな画像(200kバイト)はなんとか送受信できたのですが、
大きな画像(1M以上)を送ろうとすると、ビルドは完了できますがソフトの起動ができません。
デバックで実行した場合はStack overflowと表示されるため、(A)が問題だと思いますが他の方法が思いつきません。どなたかうまく送れる方法をご教示ください。
〇環境
OS:windouws7(SP1) 32ビットOS
開発:visual C++(2008)
メモリ:4GB
CPU:2.5GHz
〇プログラム
★struct.h:
#define MAX_BMP_SIZE 500000//・・・1M以上を送る場合はここを10000000以上にしています。(A) typedef struct { unsigned short marker;//①マーカー unsigned long size;//②データバイト数 unsigned short tp;//③ヘッダ種別 unsigned short no;//④ヘッダ番号 float x;//数値1 float y;//数値2 unsigned char bmpfile[MAX_BMP_SIZE];//ビットマップ用の配列 } BMP_PIC;
★tTCP.h:
Class CtTCP:public CDialog { ・・・・ public: BMP_PIC m_BmpPic; };
★tTCP.cpp:
static
1 FILE *BMPFP; 2 #define BMPDATA ".\\pic.bmp" 3 void CtTCP::Loop(void) 4 { 5 ・・・・ 6 M_TAB = 0; 7 if(M_TAB == 0){ 8 BMPFP = fopen(BMPDATA, "rb"); 9 10 m_BmpPic.marker = 0xABCD; 11 m_BmpPic.size = sizeof(BMP_PIC) - 10;//・・・実際のデータ(数値+ビットマップ)サイズを指定する。 12 m_BmpPic.type = 0; 13 m_BmpPic.no = 0; 14 m_BmpPic.x = 1000; 15 m_BmpPic.y = 2000; 16 fread(m_BmpPic.bmpfile, 1, sizeof(BMP_PIC), BMPFP); 17 sendsize = send(s1, reinterpret_cast<const char*>(&m_BmpPic), sizeof(m_BmpPic), 0); 18 //↑のs1はソケットです。 19 20 fclose(BMPFP); 21 M_TAB = 1; 22 } 23 }
*ちなみに上のプログラムの場合、送り側で200kのビットマップが受信側では500k近いサイズになっています。
回答2件
あなたの回答
tips
プレビュー