Хотя спокойствие действительно отвечает на вопрос, который вы задаете со стороны жизни уровня 4 OSI, я чувствую, что вы больше смотрите на уровни приложений в своем вопросе. TCP определенно обрабатывает все, начиная от задержки, окон передачи и т. Д. На стороне сети. Однако он не определяет напрямую, что произойдет, если пользователь преждевременно завершит сеанс загрузки, а затем решит забрать его позже, когда он остановился.
Чтобы ответить на ваш вопрос под другим углом, я бы определенно рекомендовал разбить файл на секции и проиндексировать их для всех соединений, независимо от скорости. Затем они могут быть повторно собраны на клиенте после загрузки всего файла. Это позволяет пользователю приостанавливать сеансы загрузки и возобновлять работу.
Что касается определения скорости, для этого могут быть предварительно созданы методы, но один из методов, который вы можете использовать, - это просто создать свой собственный тест скорости:
Отправьте 1 МБ клиенту (загрузите), и он отправит ответ после получения. 1100, разделенное на время, необходимое для получения ответа от клиента, - это КБ / с, которые клиент загружает с сервера. И наоборот, чтобы проверить загрузку с клиента.
Что касается передачи, я бы рекомендовал использовать существующие технологии. SFTP поддерживает аутентифицированную передачу зашифрованных данных. Это в основном FTP, но по SSH. Где-то должны быть доступны API-интерфейсы для взаимодействия с этим.
Кстати, я никогда не делал ничего такого, о чем вы говорите, но, надеюсь, мои идеи, по крайней мере, дадут вам пару вариантов для рассмотрения.