|
Модераторы: Snowy, Poseidon, MetalFan |
|
BDQ |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 25.1.2016 Репутация: нет Всего: нет |
Нужна помощь (совет, консультация) в реализации доскачки (дозагрузки) фаила при разрыве соединения во время его передачи (на подобии как у торрента). Технология сокеты. Среда программирования delphi. Если это не возможно или посоветуйте новую среду и расскажите о реализации. Заранее спасибо!
Код Сервера
Код клиента
|
||||
|
|||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Код некорректен с точки зрения работы с сокетами.
Нельзя использовать задержки типа Sleep и ProcessMessages. В очередной раз "пропиарю" свои надстройки: http://forum.vingrad.ru/forum/topic-290376...y2090440/0.html Общая методология передачи с возможностью докачки, по упрощенной аналогии с торрентами: 1. Клиент запрашивает сводную информацию по файлу: общий размер и хеши блоков с размером каждого блока и возможно - позицией начала блока от начала файла. Сервер отдает эти данные в какой-либо заранее определенной структуре. 2. Клиент, получив данные, если файла нет - создает файл. 2.1. Клиент устанавливает файлу общий размер, полученный от сервера. 2.2. Клиент на основании полученной информации смотрит в имеющийся у него файл поблочно. - если хеш локального блока соответствует информации, полученной от сервера - пропускаем - если хеш локального блока не соответствует - запрашиваем у сервера блок (указывая номер блока или позицию от начала файла, его размер и имя файла). Все запросы делаются асинхронно. Т.е. клиент отправив запрос не сидит в ожидании ответа сервера, а продолжает выполнение дальше. В нашем случае - продолжает п.2.2, пока не отправит запросы на все необходимые блоки, после чего спокойно выходит из события и ожидает, пока не возникнет событие приема из п.3 - сервер на основании каждого полученного запроса на отправку блока вычленяет нужные данные из файла и отправляет их клиенту, сопровождая служебным заголовком (имя файла, номер блока или позиция от начала файла, размер блока). 3. Клиент, получив от сервера служебную информацию с блоком данных: открывает файл, смещается на нужную позицию в файле и записывает блок. Для полноты картины можно рядом с файлом создавать служебный файлик с информацией из п.1 и работать в том числе с ним. |
|||
|
||||
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |