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

檔案的傳輸問題

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


發表:3
回覆:3
積分:1
註冊:2003-12-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-09 02:36:24 IP:203.204.xxx.xxx 未訂閱
之前在網路上參考包大哥所寫的檔案傳輸程式    *************************************************** 請參考包大哥的作品 (Server端) http://delphi.ktop.com.tw/topic.php?topic_id=25913 (Client端) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25912 Client端的程式中記得改Address才可以連到Server。 ***************************************************    之後我按照了包大哥的程式自己實作了一遍,發現了一個問題~     
 void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
        MYPACK mp;
        ClientSocket1->Socket->ReceiveBuf(&mp,sizeof(MYPACK));
        AnsiString hd=(AnsiString)mp.Header;
        if(hd.SubString(1,4)=="FILE")
        {
           if(hd=="FILE-START")
           {
              msFile->Size=mp.TotalDataSize;
              msFile->Position=0;
           }
           msFile->Write(mp.ThisData,mp.ThisDataSize);
           if(hd=="FILE-END");
           {
              msFile->Position=0;
              msFile->SaveToFile(".\\test1.htm");//SaveDialog1->FileName);
              msFile->Clear();               }
        }
}
--------------------------------------------------- 封包的傳輸和接收都沒問題 但這一行有問題: msFile->Write(mp.ThisData,mp.ThisDataSize); 每次都會從msFile->Position的位置開始寫, 也就是說每次寫入都會覆寫之前的內容, 而使得最後所得的結果都會是最後一個封包的內容。 這是我改寫的程式碼: http://moon.cse.yzu.edu.tw/~s902339/Client_Server.exe 基本上傳封包的方法都和包大哥的一樣, 只是不知為何結果都會發生覆寫。 謝謝~
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-09 09:55:23 IP:203.73.xxx.xxx 未訂閱
引言: 之前在網路上參考包大哥所寫的檔案傳輸程式 *************************************************** 請參考包大哥的作品 (Server端) http://delphi.ktop.com.tw/topic.php?topic_id=25913 (Client端) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25912 Client端的程式中記得改Address才可以連到Server。 *************************************************** 之後我按照了包大哥的程式自己實作了一遍,發現了一個問題~
 void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
        MYPACK mp;
        ClientSocket1->Socket->ReceiveBuf(&mp,sizeof(MYPACK));
        AnsiString hd=(AnsiString)mp.Header;
        if(hd.SubString(1,4)=="FILE")
        {
           if(hd=="FILE-START")
           {
              msFile->Size=mp.TotalDataSize;
              msFile->Position=0;
           }
           msFile->Write(mp.ThisData,mp.ThisDataSize);
           if(hd=="FILE-END");
           {
              msFile->Position=0;
              msFile->SaveToFile(".\\test1.htm");//SaveDialog1->FileName);
              msFile->Clear();               }
        }
}
--------------------------------------------------- 封包的傳輸和接收都沒問題 但這一行有問題: msFile->Write(mp.ThisData,mp.ThisDataSize); 每次都會從msFile->Position的位置開始寫, 也就是說每次寫入都會覆寫之前的內容, 而使得最後所得的結果都會是最後一個封包的內容。 這是我改寫的程式碼: http://moon.cse.yzu.edu.tw/~s902339/Client_Server.exe 基本上傳封包的方法都和包大哥的一樣, 只是不知為何結果都會發生覆寫。 謝謝~
deaman 你好:
(1)請問?? 你的 server 端的寫法呢?? 在 client 端會先 check 每個封包的
   header 喔,"FILE-START" 代表起始封包,"FILE-CONTINUE" 代表中間的封
   包,"FILE-END" 代表最後的封包,你在 server 端傳出之前,是否都有正確
   的設定該次封包的 header 呢??
(2)只是要傳送 stream (串流),還有另外一個方法可以使用
   >    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
deaman
一般會員


發表:3
回覆:3
積分:1
註冊:2003-12-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-09 12:51:36 IP:203.204.xxx.xxx 未訂閱
實在十分的抱歉.. 我找到原因了:  
if(hd=="FILE-END");
 
多了一個分號,所以每次當然都會從 >
系統時間:2024-05-03 13:59:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!