使用c#测量tcp上的数据传输速率

时间:2011-01-09 20:57:00

标签: c# bandwidth tcpclient transfer

我想衡量当前的下载速度。我通过TCP发送大文件。我怎样才能每秒捕获传输速率?如果我使用IPv4InterfaceStatistics或类似方法,而不是捕获文件传输速率,我捕获设备传输速率。捕获设备传输速率的问题在于它通过网络设备捕获所有正在进行的数据,而不是我传输的单个文件。

如何捕获文件传输速率?即时通讯使用c#。

1 个答案:

答案 0 :(得分:1)

由于您无法控制流以告诉他读取了多少,您可以在流读取之前和之后加上时间戳,然后根据接收或发送的字节计算速度:

using System.IO;
using System.Net;
using System.Diagnostics;

// some code here...

StopWatch stopWatch = new stopWatch();

// Begining of the loop

int offset = 0;
stopWatch.Reset();
stopWatch.Start();

bytes[] buffer = new bytes[1024]; // 1 KB buffer
int actualReadBytes = myStream.Read(buffer, offset, buffer.Length);

// Now we have read 'actualReadBytes' bytes 
// in 'stopWath.ElapsedMilliseconds' milliseconds.

stopWatch.Stop();
offset += actualReadBytes;
int speed = (actualReadBytes * 8) / stopWatch.ElapsedMilliseconds; // kbps

// End of the loop

您应该将Stream.Read放入try/catch并处理读取异常。写入流并计算速度是一样的,只有这两行受到影响:

myStream.Write(buffer, 0, buffer.Length);
int speed = (buffer.Length * 8) / stopWatch.ElapsedMilliseconds; // kbps