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

在multicast下無法接收到全部的資料.//使用indy9實現multicast.

尚未結案
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-03 22:40:39 IP:140.125.xxx.xxx 未訂閱
我是照寫下面鏈結中的但是無法接收到全部的檔案.例如我設將檔案切成了1024送出一個,則原本檔案有28K,只能收到9K.而2048時,則為10K.及切成5120時,則為15K, http://delphi.ktop.com.tw/topic.php?topic_id=45299    ps:server與client均是以本機來測試的. 謝謝回答     server  
void __fastcall Tclient::client_buttonClick(TObject *Sender)
{
    if(OpenDialog1->Execute() )
     {
        client_server->Active = true;
        TMemoryStream *ms=new TMemoryStream;
        ms->LoadFromFile(OpenDialog1->FileName);
        ms->Position =0;
        AnsiString sz;
        this->client_stat1->SimpleText ="file_path="
                         OpenDialog1->FileName ;             if(ms->Size>8192)
         {
         int timer=ms->Size /8192;
         sz.SetLength(8192);
           for(int counter=1;counter<=(timer 1);counter  )
              {
                      //CopyMemory(&sz[1], ms->Memory,5120);
                      ms->Read(&sz[1],8192);                          client_server->Send(sz);                          //virtual int __fastcall Seek(int Offset, Word                               Origin);
                      ms->Seek(counter*8192-1,soFromBeginning        );
              }
         }
         else
         {
         sz.SetLength(ms->Size);
         CopyMemory(&sz[1], ms->Memory, ms->Size);
          client_server->Send(sz);
          }
          client_stat1->SimpleText="file multicasting...";
          client_server->Active = false;
          Form2->Show();         } 
client
void __fastcall TForm2::IdIPMCastClient1IPMCastRead(TObject *Sender,
      TStream *AData, TIdSocketHandle *ABinding)
{
if(i==0)
save=new TMemoryStream;      Memo1->Lines->Add("receiving...");
  AnsiString receive;
TMemoryStream *ms=new TMemoryStream;    receive.SetLength((AData->Size) 1 );
ms->CopyFrom(AData, AData->Size);    ms->SaveToStream(save);
i  ;
save->Seek(i*8192,soFromBeginning); //to test the courrent    /*Writes the entire contents of the memory stream to the stream object specified by Stream.    void __fastcall SaveToStream(TStream* Stream);*/    Memo1->Lines->Add("receive");
delete ms;
}
 
Try it!
------
Try it!
jackhsu0104
一般會員


發表:0
回覆:1
積分:0
註冊:2004-03-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-13 07:44:35 IP:66.18.xxx.xxx 未訂閱
因為你 send 完以後沒有檢查是否已 send 完畢, 就繼續send... 加上一行 client_server->Binding->Readerable(50); 就可以了
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-21 14:35:54 IP:140.125.xxx.xxx 未訂閱
謝謝您的回答....我現在就來試試.... 可是我用sniffer看的話...是有送出全部的資料...可能是因我是以單一電腦來測的吧.. Try it!
------
Try it!
neuraltek99
一般會員


發表:2
回覆:4
積分:1
註冊:2005-07-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-25 16:04:16 IP:220.134.xxx.xxx 未訂閱
MultiCast是允許遺漏封包的傳輸協定,通常是用於影音傳輸,如果要用於檔案資料上,傳送過去的資料一定要有回覆信號回來,以確定資料正確收到後,再傳下一個,通常每次會多送幾個相同的封包,而每個相同資料的封包都需自己設定一個相同的序號(用結構),當接收端收到相同序號的封包就遺棄它,因為我們只需要用到一個,這樣收到的機率會增加。而MultiCast最大的好處是可以一對多傳輸,而不會吃太多頻寬。
Ktop_Robot
站務副站長


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-18 17:32:48 IP:000.000.xxx.xxx 未訂閱
提問者您好:


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


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


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

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