Socket傳送時資料遺失 |
尚未結案
|
senkune
一般會員 發表:1 回覆:1 積分:0 註冊:2006-12-28 發送簡訊給我 |
請問一個問題
想要寫一個視訊的程式 使用ClientSocket跟ServerSocket來傳送經過壓縮的圖片 在傳給本機的時候沒有問題可以正常接收 但是在傳到其他電腦的時候 則會出現資料遺失的情況 想請問各位大大是哪一個地方出了問題 ClientSocket跟ServerSocket元件的某些事件像是Error等沒有全部寫的話會有影響嗎 以下是壓縮跟傳送的程式碼 LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr )
{ static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize, byte; TMemoryStream *stream = new TMemoryStream; Form1->StatusBar1->SimpleText="FrameCallBack"; // 取得圖片資料 VideoStr=LPVIDEOHDR(lpvhdr); // 取得CAP訊息 capGetStatus( hCapWnd, &status, sizeof(status) ) ; // 取得圖片格式容量大小 BIHsize=capGetVideoFormatSize( hCapWnd ); // 取得圖片格式 代入 bitmapinfohead 內 capGetVideoFormat( hCapWnd, &BitmapHead, BIHsize); // 設定 BITMAPINFO BitmapInfo.bmiHeader=BitmapHead; // 取得圖檔總容量
stream->Size=sizeof(BitmapFileHead) sizeof(BitmapHead) BitmapHead.biSizeImage; // 設定 BITMAPFILEHEAD
BitmapFileHead.bfType=0x4D42; //總是 BM BitmapFileHead.bfSize=stream->Size; //該圖檔總大小 BitmapFileHead.bfReserved1=(WORD)0; BitmapFileHead.bfReserved2=(WORD)0; BitmapFileHead.bfOffBits=sizeof(BitmapFileHead)-2 sizeof(BitmapHead); // 偏移至imagedata大小//減2 // 將資料存入 memorystream
stream->Position=0; stream->WriteBuffer( &BitmapFileHead.bfType, sizeof(BitmapFileHead.bfType) ); stream->WriteBuffer( &BitmapFileHead.bfSize, sizeof(BitmapFileHead.bfSize) ); stream->WriteBuffer( &BitmapFileHead.bfReserved1, sizeof(BitmapFileHead.bfReserved1) ); stream->WriteBuffer( &BitmapFileHead.bfReserved2, sizeof(BitmapFileHead.bfReserved2) ); stream->WriteBuffer( &BitmapFileHead.bfOffBits, sizeof(BitmapFileHead.bfOffBits) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); (void*)ptr=stream->Memory; ptr = BitmapFileHead.bfOffBits; Move( VideoStr->lpData, ptr, BitmapHead.biSizeImage); // 將資料存入 memorystream // 存入完成
int JPGBufferlen; int image_width=BitmapHead.biWidth,
image_height=BitmapHead.biHeight; InitEncoder(image_width,image_height,50,3,JCS_RGB);
pJPG=(char *)malloc(1024*1024*sizeof(char)); JPGEncoder(VideoStr->lpData,pJPG,&JPGBufferlen);
leng=JPGBufferlen; Form1->ClientSocket1->Socket->SendBuf(pJPG,JPGBufferlen);
free(pJPG);
ReleaseEncoder();
delete( stream );
capSetCallbackOnFrame (hCapWnd, NULL); //停止callbackonframe
return(0); } |
senkune
一般會員 發表:1 回覆:1 積分:0 註冊:2006-12-28 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |