全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2213
推到 Plurk!
推到 Facebook!

Socket傳送時資料遺失

尚未結案
senkune
一般會員


發表:1
回覆:1
積分:0
註冊:2006-12-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-31 22:36:33 IP:140.116.xxx.xxx 訂閱
請問一個問題
想要寫一個視訊的程式
使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-04 11:38:26 IP:140.116.xxx.xxx 訂閱
似乎是版本的關係
把BCB更新後可以正常傳送
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-26 20:50:24 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-20 13:13:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!