====== Формулы передачи данных для начинающих ====== **Автор**: [[|Jason Pierce]] Данным примером я попытаюсь дать ответы на следующие вопросы: Каково различие между 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. Так же хотелось бы дать некоторые разъяснения по поводу слова "бод" (baud). Обычно для модема "боды" расшифровываются как бит в секунду. На самом деле это не так. Бод (Baud) означает частоту звука в телефонной линии. Т. е. в зависимости от модема, который Вы используете, количество бит, которые могут быть переданы зависит от частоты звука, необходимой для обеспечения нужной скорости передачи. **Обратите внимание:** Приведённый ниже пример, использует компонент //NetMasters TNMHTTP//. Однако, если Вы "прикипели" к какому-то другому компоненту TCP/IP, то переделать пример под этот компонент не составит большого труда. **Используемые обозначения:**\\ bps = байт, переданных за 1 секунду\\ KBps (KB/Sec) = bps / 1024\\ Kbps (Kb/Sec) = KBps x 8\\ **Краткий алгоритм приведённого ниже примера:** - Сохраняем в переменной время начала загрузки: nStartTime := GetTickCount; - Сохраняем в переменной размер файла (KB): nFileSize := "File Size"; - Начало передачи данных. - Обновляем количество переданных байт: Inc(nBytesTransferred, nNewBytes); - Получаем оставшееся время: nTimeElapsed := (GetTickCount - nStartTime) / 1000; - Вычисляем bps: nBps := BytesTransferred / nTimeElapsed; - Вычисляем KBps: nKBps := nBps / 1024; **Используемые данные:**\\ Общее время скачивания (секунд) := nFileSize / nKBps;\\ bps := FloatToStr(nBps);\\ KB/Sec (KBps) := FloatToStr(nKBps);\\ Осталось секунд := FloatToStr(((nFileSize - BytesTransferred) / 1024) / KBps);\\ Рабочий пример: {{faq:delphi:net:transmit.zip}}