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

用Indy傳檔,如何計算剩餘時間,及傳輸速度

答題得分者是:flyup
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-06 17:33:44 IP:61.58.xxx.xxx 未訂閱
請教先進 若用Indy傳檔,如何計算剩餘時間,及傳輸速度呢?? 謝謝
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-06 18:23:05 IP:192.168.xxx.xxx 未訂閱
引言: 請教先進 若用Indy傳檔,如何計算剩餘時間,及傳輸速度呢?? 謝謝
請問您是用那一個元件 是用HTTP或是FTP的上傳方式? 應該是在事件中會有進度的enevt! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-06 18:26:53 IP:211.74.xxx.xxx 未訂閱
引言: 請教先進 若用Indy傳檔,如何計算剩餘時間,及傳輸速度呢?? 謝謝
不知小弟想的有沒有錯,若有錯誤請先進們指教 每秒傳輸速度(Bytes/Sec)=已傳資料量(Bytes)/已傳輸時間 剩餘時間=剩餘資料量(Bytes)/每秒傳輸速度
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-06 18:28:09 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 請教先進 若用Indy傳檔,如何計算剩餘時間,及傳輸速度呢?? 謝謝
請問您是用那一個元件 是用HTTP或是FTP的上傳方式? 應該是在事件中會有進度的enevt! ~~~Delphi K.Top討論區站長~~~
用Socket,謝謝
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-06 19:37:43 IP:61.225.xxx.xxx 未訂閱
Formulae in use: bps = bytes transferred in 1 second KBps (KB/Sec) = bps / 1024 Kbps (Kb/Sec) = KBps x 8    Steps taken: 1. Store the start time in a variable: nStartTime := GetTickCount; 2. Store the file size (KB) in a variable: nFileSize := "File Size"; 3. Begin data transfer. 4. Update bytes transferred: Inc(nBytesTransferred, nNewBytes); 5. Get elapsed time: nTimeElapsed := (GetTickCount - nStartTime) / 1000; 6. Calculate bps: nBps := BytesTransferred / nTimeElapsed; 7. Calculate KBps: nKBps := nBps / 1024;    Using the data: Total download time (seconds) := nFileSize / nKBps; bps := FloatToStr(nBps); KB/Sec (KBps) := FloatToStr(nKBps); Seconds remaining := FloatToStr(((nFileSize - BytesTransferred) / 1024) / KBps);        --------------------------------------------------------------------------------    unit Main;    interface    uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Gauges, Psock, NMHttp;    type TfMain = class(TForm) Label1: TLabel; eURL: TEdit; bGet: TButton; lbMessages: TListBox; gbDetails: TGroupBox; lEstimate: TLabel; lKBps: TLabel; lReceived: TLabel; lRemaining: TLabel; gProgress: TGauge; NMHTTP1: TNMHTTP; lbps: TLabel; bCancel: TButton; procedure NMHTTP1PacketRecvd(Sender: TObject); procedure bGetClick(Sender: TObject); procedure bCancelClick(Sender: TObject); procedure NMHTTP1Connect(Sender: TObject); procedure NMHTTP1ConnectionFailed(Sender: TObject); procedure NMHTTP1Disconnect(Sender: TObject); procedure NMHTTP1Failure(Cmd: CmdType); procedure NMHTTP1HostResolved(Sender: TComponent); procedure NMHTTP1InvalidHost(var Handled: Boolean); procedure NMHTTP1Status(Sender: TComponent; Status: String); procedure NMHTTP1Success(Cmd: CmdType); private { Private declarations } function ss2nn(Seconds: Integer): String; public { Public declarations } end;    var fMain: TfMain; nFileSize: Double; nStartTime: DWord;    implementation    {$R *.DFM}    {The purpose of this function is to determine how many minutes and seconds there are in a given number of seconds} function TfMain.ss2nn(Seconds: Integer): String; var nMin, nSec: Integer; begin {Check for less than 1/Min} if Seconds < 60 then Result := '0 minutes ' + IntToStr(Seconds) + ' seconds' else begin {Determine minutes} nMin := Seconds div 60; {Determine seconds} nSec := Seconds - (nMin * 60); {Return Result} Result := IntToStr(nMin) + ' minutes ' + IntToStr(nSec) + ' seconds'; end; end;    procedure TfMain.NMHTTP1PacketRecvd(Sender: TObject); var nBytesReceived, nTimeElapsed, nBps, nKBps: Double; begin {The following is performed only once, upon reception of the first packet} if nFileSize <> NMHTTP1.BytesTotal then begin {Get File Size} nFileSize := NMHTTP1.BytesTotal; {Calculate transfer time based on 33.6 Kbps connection} lEstimate.Caption := 'Estimated download time at 33.6 Kbps: ' + ss2nn(Round( (nFileSize / 1024) / 4.2)); {Get Start Time} nStartTime := GetTickCount; end;    {Update nBytesReceived} nBytesReceived := NMHTTP1.BytesRecvd;    {Calculate the amount of seconds passed since the transfer started} nTimeElapsed := (GetTickCount - nStartTime) / 1000; {Check for 0/Sec elapsed, setting default if so, to prevent division by zero} if nTimeElapsed = 0 then nTimeElapsed := 1;    {Calculate bytes per second} nBps := nBytesReceived / nTimeElapsed; {Calculate Kilobytes per second} nKBps := nBps / 1024;    {Update Controls} gProgress.Progress := Round((nBytesReceived * 100) / nFileSize); lbps.Caption := IntToStr(Round(nBps * 8)) + ' bits per second'; lKBps.Caption := IntToStr(Round(nKBps)) + ' KB/Sec (KBps)'; lReceived.Caption := FloatToStr(nBytesReceived) + ' of ' + FloatToStr( nFileSize) + ' bytes received'; lRemaining.Caption := ss2nn(Round(((nFileSize - nBytesReceived) / 1024) / nKBps)) + ' remaining'; end;    procedure TfMain.bGetClick(Sender: TObject); begin {Reset Variables} nFileSize := 0;    {Reset Controls} lbMessages.Clear; gProgress.Progress := 0; lEstimate.Caption := 'Estimated download time at 33.6 Kbps: 0 minutes 0 ' + 'seconds'; lbps.Caption := '0 bits per second'; lKBps.Caption := '0 KB/Sec (KBps)'; lReceived.Caption := '0 of 0 bytes received'; lRemaining.Caption := '0 minutes 0 seconds remaining';    {Get File} NMHTTP1.Get(eURL.Text); end;    procedure TfMain.bCancelClick(Sender: TObject); begin {Disconnect from Host} NMHTTP1.Disconnect;    {Update lbMessages} lbMessages.Items.Append('Get Canceled'); lbMessages.Items.Append('Disconnected'); end;    procedure TfMain.NMHTTP1Connect(Sender: TObject); begin {Disable/Enable Controls} bGet.Enabled := False; bCancel.Enabled := True;    {Work with lbMessages} with lbMessages.Items do begin Append('Connected'); Append('Local Address: ' + NMHTTP1.LocalIP); Append('Remote Address: ' + NMHTTP1.RemoteIP); end; end;    procedure TfMain.NMHTTP1ConnectionFailed(Sender: TObject); begin ShowMessage('Connection Failed.'); end;    procedure TfMain.NMHTTP1Disconnect(Sender: TObject); begin {Disable/Enable Controls} bCancel.Enabled := False; bGet.Enabled := True;    {Update lbMessages} if NMHTTP1.Connected then lbMessages.Items.Append('Disconnected'); end;    procedure TfMain.NMHTTP1Failure(Cmd: CmdType); begin case Cmd of CmdGET : lbMessages.Items.Append('Get Failed'); CmdOPTIONS: lbMessages.Items.Append('Options Failed'); CmdHEAD : lbMessages.Items.Append('Head Failed'); CmdPOST : lbMessages.Items.Append('Post Failed'); CmdPUT : lbMessages.Items.Append('Put Failed'); CmdPATCH : lbMessages.Items.Append('Patch Failed'); CmdCOPY : lbMessages.Items.Append('Copy Failed'); CmdMOVE : lbMessages.Items.Append('Move Failed'); CmdDELETE : lbMessages.Items.Append('Delete Failed'); CmdLINK : lbMessages.Items.Append('Link Failed'); CmdUNLINK : lbMessages.Items.Append('UnLink Failed'); CmdTRACE : lbMessages.Items.Append('Trace Failed'); CmdWRAPPED: lbMessages.Items.Append('Wrapped Failed'); end; end;    procedure TfMain.NMHTTP1HostResolved(Sender: TComponent); begin lbMessages.Items.Append('Host Resolved'); end;    procedure TfMain.NMHTTP1InvalidHost(var Handled: Boolean); begin ShowMessage('Invalid Host. Please specify a new URL.'); end;    procedure TfMain.NMHTTP1Status(Sender: TComponent; Status: String); begin if NMHTTP1.ReplyNumber = 404 then ShowMessage('Object Not Found.'); end;    procedure TfMain.NMHTTP1Success(Cmd: CmdType); begin case Cmd of {Make sure Get was not canceled} CmdGET: if NMHTTP1.Connected then lbMessages.Items.Append('Get Succeeded');    CmdOPTIONS: lbMessages.Items.Append('Options Succeeded'); CmdHEAD : lbMessages.Items.Append('Head Succeeded'); CmdPOST : lbMessages.Items.Append('Post Succeeded'); CmdPUT : lbMessages.Items.Append('Put Succeeded'); CmdPATCH : lbMessages.Items.Append('Patch Succeeded'); CmdCOPY : lbMessages.Items.Append('Copy Succeeded'); CmdMOVE : lbMessages.Items.Append('Move Succeeded'); CmdDELETE : lbMessages.Items.Append('Delete Succeeded'); CmdLINK : lbMessages.Items.Append('Link Succeeded'); CmdUNLINK : lbMessages.Items.Append('UnLink Succeeded'); CmdTRACE : lbMessages.Items.Append('Trace Succeeded'); CmdWRAPPED: lbMessages.Items.Append('Wrapped Succeeded'); end; end;    end.        
系統時間:2024-05-04 9:34:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!