Измерьте скорость передачи данных по TCP, используя C # - PullRequest
2 голосов
/ 09 января 2011

Я хочу измерить текущую скорость загрузки.Я посылаю огромный файл через TCP.Как я могу захватить скорость передачи каждую секунду?если я использую IPv4InterfaceStatistics или аналогичный метод, вместо того, чтобы фиксировать скорость передачи файлов, я фиксирую скорость передачи устройства.проблема с захватом скорости передачи устройства заключается в том, что он захватывает все текущие данные через сетевое устройство, а не один файл, который я передаю.

как я могу получить скорость передачи файла?я использую c #.

1 Ответ

1 голос
/ 10 января 2011

Поскольку у вас нет контроля над потоком, чтобы сказать ему, сколько прочитано, вы можете отметить время до и после чтения потока, а затем на основе полученных или отправленных байтов вычислить скорость:

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
...