線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1619
推到 Plurk!
推到 Facebook!

請問透過Socket如何在Client端顯示Server端傳送過來的jpeg file??

答題得分者是:RaynorPao
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-11 16:40:39 IP:211.78.xxx.xxx 未訂閱
structure如下 Typedef struct TEST { DWORD header; DWORD size; BYTE jpgdata[1]; }TEST; size = 8(DWORD*2) length(jpgdata) 那我該怎麼去抓取jpg的file在我Client端的畫面做顯示呢??
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-11 17:23:03 IP:203.73.xxx.xxx 未訂閱
引言: structure如下 Typedef struct TEST { DWORD header; DWORD size; BYTE jpgdata[1]; }TEST; size = 8(DWORD*2) length(jpgdata) 那我該怎麼去抓取jpg的file在我Client端的畫面做顯示呢??
shing187 你好:
(1)先想辦法取得 jpg 圖形的實體資料,這部分可能需要 server 端的配合,也
   就是說,最好先把 jpg 圖形的實體資料切割成比較小的封包來傳送,例如:
   假設原本的 jpg 大小為 201k,每次只傳送 2k,server 總共需要傳送 101
   次,client 也要接收 101 次(在 ClientSocketRead 裡面接收)
(2)在(1)中每次接收到的資料,依次放入一個 TMemoryStream *msBuf; 等到搜
   集到全部的 jpg 資料以後,就可以利用(3)的程式碼達成
(3)範例程式碼...       >>>>>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-11 17:55:22 IP:211.78.xxx.xxx 未訂閱
在ClientSocket1Read中寫了下面的程式 TEST pstrm; ClientSocket1->Socket->ReceiveBuf(&pstrm, sizeof(TEST)); TMemoryStream *msBuf=new TMemoryStream; msBuf->Size=TEST.size; msBuf->Write(&pstrm.lpdata[1],1); 可是msBuf->Size=TEST.size;這一行好像會有問題 執行時會出現錯誤訊息 不知道該怎麼寫才正確?? 才能將jpg都Load到msBuf中 發表人 - shing187 於 2003/02/11 17:57:10
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-11 21:11:06 IP:61.221.xxx.xxx 未訂閱
引言: 在ClientSocket1Read中寫了下面的程式 TEST pstrm; ClientSocket1->Socket->ReceiveBuf(&pstrm, sizeof(TEST)); TMemoryStream *msBuf=new TMemoryStream; msBuf->Size=TEST.size; msBuf->Write(&pstrm.lpdata[1],1); 可是msBuf->Size=TEST.size;這一行好像會有問題 執行時會出現錯誤訊息 不知道該怎麼寫才正確?? 才能將jpg都Load到msBuf中
shing187 你好:
(1)上面那一行改成這樣看看 msBuf->Size=pstrm.size;
(2)另外~~我個人建議你的封包最好改成以下這樣(參考看看)
   >>>>>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-12 11:40:22 IP:211.78.xxx.xxx 未訂閱
Typedef struct TEST { DWORD header; DWORD size; BYTE jpgdata[4096]; }TEST; 我的CODE如下..... TEST pstrm; TMemoryStream *msBuf=new TMemoryStream; msBuf->Size=pstrm.size; msBuf->Write(pstrm.lpdata, pstrm.size); TJPEGImage *jpeg=new TJPEGImage; msBuf->Position=0; jpeg->LoadFromStream(msBuf); Image1->Picture->Assign(jpeg); delete jpeg; delete msBuf; 可是得到的JPEG FORMAT,表頭會多一個FF的BYTE 為什麼呢??
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-12 16:32:38 IP:203.73.xxx.xxx 未訂閱
引言: Typedef struct TEST { DWORD header; DWORD size; BYTE jpgdata[4096]; }TEST; 我的CODE如下..... TEST pstrm; TMemoryStream *msBuf=new TMemoryStream; msBuf->Size=pstrm.size; msBuf->Write(pstrm.lpdata, pstrm.size); TJPEGImage *jpeg=new TJPEGImage; msBuf->Position=0; jpeg->LoadFromStream(msBuf); Image1->Picture->Assign(jpeg); delete jpeg; delete msBuf; 可是得到的JPEG FORMAT,表頭會多一個FF的BYTE 為什麼呢??
shing187 你好: 請問你的 server 端是怎麼寫的呢?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-12 17:12:41 IP:211.78.xxx.xxx 未訂閱
RaynorPao你好.... 我只有Server端程式的Struct,並不知道Server端程式的寫法!! 我目前把做法改變為包括Header等一起寫入到MemoryStream中 然後再把MemoryStream的Data放到struct中做處理 但是我目前遇到的問題 [1] int size = ClientSocket1->Socket->ReceiveBuf( x, y) 不知道是為什麼?? 不管y值是多少,第一個size一定都是8192,後面的size值會跟y值相同 [2] 該怎麼把ReceiveBuf得到的Data連續的放入MemoryStream 我的Data會被後面的Data覆蓋,程式該怎麼做呢?? [3] 我該怎麼把MemoryStream的Data放到Struct中呢?? 發表人 - shing187 於 2003/02/12 18:29:22
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-13 12:49:36 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao你好.... 我只有Server端程式的Struct,並不知道Server端程式的寫法!! 我目前把做法改變為包括Header等一起寫入到MemoryStream中 然後再把MemoryStream的Data放到struct中做處理 但是我目前遇到的問題 [1] int size = ClientSocket1->Socket->ReceiveBuf( x, y) 不知道是為什麼?? 不管y值是多少,第一個size一定都是8192,後面的size值會跟y值相同 [2] 該怎麼把ReceiveBuf得到的Data連續的放入MemoryStream 我的Data會被後面的Data覆蓋,程式該怎麼做呢?? [3] 我該怎麼把MemoryStream的Data放到Struct中呢??
shing187 你好: 麻煩你先發一封 mail 給我 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-13 16:41:55 IP:211.78.xxx.xxx 未訂閱
RaynorPao你好.... 我現在程式的寫法如下....不知道哪裡有錯誤... 沒有辦法從struct讀到正確的資料 在ClientSocket1Read中 TEST pstrm; BYTE *Buf = new BYTE[8192]; int size=ClientSocket1->Socket->ReceiveBuf(Buf, 8192); msBuf->WriteBuffer(Buf, size); msBuf->Read(&pstrm, size); delete[] Buf; 還是該用什麼method將MemoryStream的data放到struct中呢?? 請指教.... 發表人 - shing187 於 2003/02/13 18:06:15
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-13 21:37:22 IP:61.221.xxx.xxx 未訂閱
shing187 你好: 請參考以下的連結文章
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-03-29 10:31:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!