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

詣問一個TClientSocket的接收資料問題

答題得分者是:RaynorPao
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-07 14:41:51 IP:61.222.xxx.xxx 未訂閱
請問各位~ 如何利用TClientSocket接收自定的buffer的資料~而且將其拆成二次讀取. 假設有二個buffer大小各為15,23Byte,但其同點為前4byte是一樣的,而在4byte中有2byte是在說明第二次讀取的長度分別為11,19.~請問各位能夠指導,希望有範例說明,以便了解.~謝謝 簡單表示: 有一buffer為15byte,而第一次讀取只要讀前4byte(其中2byte是在宣告第二次存取的長度),第二次讀取後面的11byte. 發表人 - kenbcb 於 2003/08/07 17:30:25
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-08 14:47:33 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位~ 如何利用TClientSocket接收自定的buffer的資料~而且將其拆成二次讀取. 假設有二個buffer大小各為15,23Byte,但其同點為前4byte是一樣的,而在4byte中有2byte是在說明第二次讀取的長度分別為11,19.~請問各位能夠指導,希望有範例說明,以便了解.~謝謝 簡單表示: 有一buffer為15byte,而第一次讀取只要讀前4byte(其中2byte是在宣告第二次存取的長度),第二次讀取後面的11byte.
kenbcb 你好: 請參考以下的範例程式碼 < class="code"> // Server __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ServerSocket1->Port=4000; ServerSocket1->Open(); } __fastcall TForm1::~TForm1() { ServerSocket1->Close(); } void __fastcall TForm1::Button1Click(TObject *Sender) { WORD wLen=11; BYTE *b=new BYTE[11 4]; b[0]='X'; b[1]='X'; *(b 2)=wLen; for(int i=0; i<11; i ) { *(b 4 i)=i; } ServerSocket1->Socket->Connections[0]->SendBuf(b, 11 4); delete b; } // Client __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ClientSocket1->Address="192.168.1.1"; ClientSocket1->Port=4000; ClientSocket1->Open(); } __fastcall TForm1::~TForm1() { ClientSocket1->Close(); } void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket) { BYTE b[1024]={0}; Socket->ReceiveBuf(b, 1024); if(b[0]=='X' && b[1]=='X') { WORD *wLen=(WORD*)(b 2); TMemoryStream *ms=new TMemoryStream; ms->Size=*wLen; ms->Write(b 4, *wLen); ms->SaveToFile("FromServer.dat"); delete ms; } } -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-08 15:33:45 IP:61.222.xxx.xxx 未訂閱
請問: (1) client那b[1024]的1024,為什麼要怎麼用?? (2) 我要把第二次讀的資料,以動能陣列存起來,要如何做;不是存成檔案? (3) 在收資料時,是一次收進來嗎? (4) 可以介紹書或網站,讓我了解網路程式,因我對寫網路程式有興趣(tcp/ip,udp...等) 謝謝...
RaynorPao
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-08 15:52:42 IP:203.73.xxx.xxx 未訂閱
引言: 請問: (1) client那b[1024]的1024,為什麼要怎麼用?? (2) 我要把第二次讀的資料,以動能陣列存起來,要如何做;不是存成檔案? (3) 在收資料時,是一次收進來嗎? (4) 可以介紹書或網站,讓我了解網路程式,因我對寫網路程式有興趣(tcp/ip,udp...等) 謝謝...
kenbcb 你好:
(1)1024 是小弟我用來暫存的 buffer
(2)TMemoryStream 本身就是類似陣列的東西,如果不想使用,也可以寫成這樣
   (其中 a 就是你想要的 BYTE array)
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
   BYTE b[1024]={0};
   Socket->ReceiveBuf(b, 1024);       if(b[0]=='X' && b[1]=='X')
   {
      WORD *wLen=(WORD*)(b 2);
      BYTE *a=new BYTE[*wLen];
      CopyMemory(a, b 4, *wLen);
      // Do something......
      delete a;
   }
}
(3)是
(4)看這一本
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23293
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-08 17:05:12 IP:61.222.xxx.xxx 未訂閱
謝謝指導~ 我會去參考那本書的
系統時間:2024-04-27 21:42:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!