檔案的傳輸問題 |
答題得分者是:RaynorPao
|
deaman
一般會員 發表:3 回覆:3 積分:1 註冊:2003-12-06 發送簡訊給我 |
之前在網路上參考包大哥所寫的檔案傳輸程式 ***************************************************
請參考包大哥的作品
(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 發送簡訊給我 |
引言: 之前在網路上參考包大哥所寫的檔案傳輸程式 *************************************************** 請參考包大哥的作品 (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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |