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

TIdHttp 用撥接傳檔案

缺席
zaguan
一般會員


發表:11
回覆:18
積分:10
註冊:2002-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-14 22:06:39 IP:61.221.xxx.xxx 未訂閱
請問大家,小弟用TIdHttp及TIdHttpServer(Indy9) 寫了一個Client及Server間傳檔案的程式。   可是當網路使用「撥接連線」時,Server傳檔給Client,我用ProgressBar在Client的OnWork事件中監看進度,當進度到達97%左右時,進度就停住了。可是我在SysTray的網路連線圖示依然在傳送「東西」。   可是這個情形,我用寬頻網路卻一切正常,請問大家這可能是什麼原因呢? 以下是片段程式碼(所有動作是在同一個Connection內完成):
Client端:
  //Cient先傳命令給Server
  HttpC.Post('', Buffer, Ret); 
Server端:
  //Server傳回檔案給Client
  AResponseInfo.ContentStream.CopyFrom(ZStream, 0); 
zaguan
一般會員


發表:11
回覆:18
積分:10
註冊:2002-03-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-16 14:30:53 IP:61.221.xxx.xxx 未訂閱
原因: 因為在計算接收檔案的進度時, 使用OnWork事件的「AWorkCount」參數, 實際上這個數值卻包含封裝封包的「頭」「尾」, 這些不是真正有效的檔案內容, 又當位於網路狀況比較不理想時, 封包數量變得又小又多(用 Sniffer 監看的,原因我不清楚), 所以接收檔案的進度會超過你預期收到的檔案大小, 當你使用 ProgressBar 之類的元件, MaxValue 設為 OnWorkBegin 事件的 AWorkCountMax 參數, 最後 Progress 會大於 MaxValue , Progress 就不會增加,看起來就像停在最後一般。 解決方法: procedure Post(AURL: string; const ASource: TStrings; const AResponseContent: TStream); 將 Progress 設為 AResponseContent.Size 這樣計算進度就會正常了。 正面思考 正面思考~~ XD
系統時間:2024-05-04 10:55:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!