Delphi World - Формули передачі даних для початківців

Даним прикладом спробую дати відповіді такі вопросы:

Яка різниця між KBps і Kbps? У чому полягає відмінність бітів, байтів та бодів? Як визначити швидкість передачі? Як з'ясувати, наскільки довго завантажуватиметься файл із певною швидкістю? Як порахувати час, що залишився до закінчення завантаження?

Для початку хотіли навести порядок з деякою плутани з приводу KBps і Kbps (літера b в нижньому регістрі). KBps це позначення кілобайт в секунду, тоді як Kbps позначає кілобіти в секунду. 1 кілобайт (KB) = 8 кілобітів (Kb).

Коли йдеться про швидкість передачі, застосовується Kbps. Таким чином, модем зі швидкість передачі 33.6K (33600 bps) передає дані зі швидкістю 4.2 KBps (4.2 кілобайта в секунду). Як бачимо, різниця між KB і Kb досить відчутна. У цьому полягає причина того, що деякі користувачі модемів за своїм незнанням не можуть зрозуміти, чому дані передаються так повільно. Насправді, дані об'ємом 33.6K передаються не за 1 секунду, а за 8, відповідно за одну секунду буде передано 33.6 Kb / 8 = 4.2.

Зверніть увагу: Наведений нижче приклад використовує компонент NetMasters TNMHTTP. Однак, якщо Ви "прикипіли" до якогось іншого компонента TCP/IP, то переробити приклад під цей компонент не складе труднощів.

bps байт, переданих за 1 секунду KBps (KB/Sec) bps / 1024 Kbps (Kb/Sec) KBps x 8

Короткий алгоритм наведеного нижче прикладу:

  1. Зберігаємо в змінний час початку завантаження: nStartTime: = GetTickCount;
  2. Зберігаємо в змінній розмір файлу (KB): nFileSize: = "File Size";
  3. Початок передачі.
  4. Оновлюємо кількість переданих байт: Inc(nBytesTransferred, nNewBytes);
  5. Отримуємо час, що залишився: nTimeElapsed:= (GetTickCount - nStartTime) / 1000;
  6. Обчислюємо bps: nBps := BytesTransferred / nTimeElapsed;
  7. Обчислюємо KBps: nKBps: = nBps/1024;