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