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

问题描述 投票:0回答:1

我正在使用 C# 通过 TCP 发送一个大文件,并且想测量下载速度。 如何捕获每秒的传输速率?如果我使用

IPv4InterfaceStatistics
或类似的方法,我会捕获设备传输速率而不是捕获文件传输速率。 捕获设备传输速率的问题在于,它捕获通过网络设备的所有数据,而不是我传输的单个文件。

如何捕获文件传输速率?

c# bandwidth tcpclient transfer
1个回答
2
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.