使用NMFTP控件时,如何得到正在传输的数据的速率为多大,单位 K/S

xhema1980 2003-08-19 05:39:08
使用NMFTP控件时,如何得到正在传输的数据的速率为多大,单位 K/S
...全文
27 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shally5 2003-09-01
  • 打赏
  • 举报
回复
笔误:接收时平均速度应为:
if (DLTime > 0)
AverageSpeed (NMFTP1->BytesRecvd/ 1024) / DLTime) ;
s = FormatFloat("0.00 KB/s", AverageSpeed);
shally5 2003-09-01
  • 打赏
  • 举报
回复
定义全局变量
TDateTime STime;
int AverageSpeed;

在发送时记录起始时间
STime = Now();
AverageSpeed=0;
//发送时的平均速度
void __fastcall TForm1::NMFTP1PacketSent(TObject *Sender)
{
AnsiString s;
TDateTime TotalTime;
WORD H, M, Sec, MS;
double DLTime;
TotalTime = Now() - STime;
DecodeTime(TotalTime, H, M, Sec, MS);
Sec = Sec + M * 60 + H * 3600;
DLTime = Sec + MS / 1000;
if (DLTime > 0)
AverageSpeed (NMFTP1->BytesSent / 1024) / DLTime) ;
s = FormatFloat("0.00 KB/s", AverageSpeed);
StatusBar1->Panels->Items[2]->Text="发送 "+IntToStr(NMFTP1->BytesSent)+"总共 "+IntToStr(NMFTP1->BytesTotal)+" 平均 "+s;
StatusBar1->Refresh();

}
//接收时平均速度
void __fastcall TForm1::NMFTP1PacketRecvd(TObject *Sender)
{
AnsiString s;
TDateTime TotalTime;
WORD H, M, Sec, MS;
double DLTime;
TotalTime = Now() - STime;
DecodeTime(TotalTime, H, M, Sec, MS);
Sec = Sec + M * 60 + H * 3600;
DLTime = Sec + MS / 1000;
if (DLTime > 0)
AverageSpeed (NMFTP1->BytesSent / 1024) / DLTime) ;
s = FormatFloat("0.00 KB/s", AverageSpeed);

StatusBar1->Panels->Items[2]->Text="已接收 "+IntToStr(NMFTP1->BytesRecvd)+"字节 总共 "+ListView1->Selected->SubItems->Strings[0]+"字节 平均 "+s;
StatusBar1->Refresh();
}
xhema1980 2003-09-01
  • 打赏
  • 举报
回复
各位高手能不能举个例子
zihan 2003-09-01
  • 打赏
  • 举报
回复
你可以采取很多种算法,可以截取一段时间收到的数据除这一段时间,也可以按照所有的受到的数据除一共用去的时间,前者一般比较实时.后者表示平均速度
xhema1980 2003-09-01
  • 打赏
  • 举报
回复
不行呀,这样总是显示的平均速度为0.00K,是不是计时器精度不够?
xhema1980 2003-08-20
  • 打赏
  • 举报
回复
只有自己UP不 :(
warton 2003-08-20
  • 打赏
  • 举报
回复
我看只有自己计算了!两个时间的数据量/时间差

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧