FtpServer有辦法知道Client目前下載的進度、速度嗎? |
答題得分者是:P.D.
|
weston
一般會員 發表:8 回覆:7 積分:3 註冊:2007-02-07 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
參考這個做法,這是Indy元件
[code delphi] {$R *.DFM} var AverageSpeed: Double = 0; ...... procedure TForm_PosUD.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); Var S: String; TotalTime: TDateTime; H, M, Sec, MS: Word; DLTime: Double; begin TotalTime:= Now - STime; DecodeTime(TotalTime, H, M, Sec, MS); Sec:= Sec M * 60 H * 3600; DLTime:= Sec MS / 1000; if DLTime > 0 then AverageSpeed:= (AWorkCount / 1024) / DLTime; S:= FormatFloat('0.00 KB/s', AverageSpeed); case AWorkMode of wmRead: StatusBar1.Panels[0].Text := '下載速度 ' S; wmWrite: StatusBar1.Panels[0].Text:= '上傳速度 ' S; end; StatusBar1.Update; if AbortTransfer then IdFTP1.Abort; ProgressBar1.Position:= AWorkCount; ProgressBar1.Update; AbortTransfer:= False; Application.ProcessMessages; end; procedure TForm_PosUD.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin TransferrignData:= True; AbortTransfer:= False; STime:= Now; if AWorkCountMax > 0 then ProgressBar1.Max:= AWorkCountMax else ProgressBar1.Max:= BytesToTransfer; AverageSpeed:= 0; end; [/code] 這要你po上程式碼,我認為有點困難,所以提供這個做法你參考看看 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
版主所打的過"渡",還是過"度",這個用詞就差了很多哦! 還算評估傳送狀況,就理論上是應該會降低效能的,但會降多少實質使用上其實我們並沒有真正去探測,不過就我應用在客戶的場合上,平均下載速率在40-50K的顯示值下,與一般的FTP下載狀況並沒有太大的差異,或許電腦的等級可以彌補這方面的問題吧!
===================引 用 wameng 文 章=================== 我自製WebServer 是可以做到。如同FTP Server 也可以做到。 只不過過渡的計算速率,是否會降低下載速度? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |