Програмираме торент клиент в Delphi

Не сте ли уморени от обединяването на файлове от услуги за хостинг на файлове като rapidshare.com? Лично на мен вече ми беше писнало от техните ограничения. За щастие, ако добра алтернатива са тракерите на Bittorent. Днес ще се опитаме да се задълбочим в този протокол и да напишем свой собствен усъвършенстван клиент.
Теория на Bittorent
Както обикновено, преди да се впуснем в битка, ще обмислим внимателно стратегията и ще се справим с теорията. "Bittorent"Протокол за p2p мрежи и е предназначен за прехвърляне на големи файлове през мрежа. Първата версия на протокола се появи през 2001 г. Към момента Bittorent стана много популярен, освен това той е стандарт за бързо разпространение на файлове. Редица функции го направиха популярен:
Ние общуваме чрез концепции
Връстник - клиентът, участващ в разпределението. Като правило празникът има две състояния - изтегляне и качване на вече изтеглени части от файла.
Сид (семена) - партньор, който вече е изтеглил целия файл и има всички негови сегменти. За да станете семе, не е нужно да изтегляте никакъв файл, можете просто да започнете да разпространявате вашите неща.
Лийчър - той е пиявица (пиявица) - връстник, който все още не разполага с всички части на файла, но продължава да се изтегля. В повечето случаи терминът се използва в отрицателен смисъл. Това е името на клиенти, които изтеглят повече, отколкото дават. Рояк - всички връстници, участващи в разпределението.
Рейтинг (съотношение на акциите) - съотношението на качените и изтеглените. Оценката е необходима, на първо място, за попълване на съдържанието. Работи по следния принцип: като изтеглите файл, вие намалявате рейтинга си, а като дадете файл, напротив, го увеличавате. Клиент с нисък рейтинг рискува да бъде забранен и има по-малко възможности от клиент с по-висок рейтинг (например няма едновременно изтегляне на няколко торента).
Как работи всичко?
Обменът с други връстници изглежда така: изпращате заявка за изтегляне на сегмент от желания файл на определен връстник - ако той няма нищо против и може да сподели това парче, процесът на изтегляне започва. След като изтеглите сегмент, уведомявате останалите връстници за наличието на ново парче на ваше разположение (така че другите връстници да знаят от кого да го изтеглят). След това всичко се повтаря. И се повтаря от стъпката, при която трябва да се свържете със сървъра и да получите информация за други връстници. Когато приключите с изтеглянето на целия файл, получавате състоянието на семената. Фигура 2 показва диаграма, показваща процеса на работа с протокола BitTorrent.
Торентна файлова структура
Файлът с метаданни (торент файл), както вече казах, съдържа цялата информация за файла (или файловете), участващ в разпространението. Без него по протокол Bittorent няма да можете да изтеглите нищо. Като цяло структурата на файла с метаданни може да бъде разделена на три компонента. Вътрешността на торент файла Има данни за бенкодиране. Файловият формат позволява съхраняване на следните типове данни: байтови низове, числа, списъци и директиви.
На пръв поглед фигурата показва „бъркотия“ от неразбираеми данни. Веднага възниква усещането, че всичко е сложно и объркващо. Всъщност няма нищо сложно. Нека се опитаме да разгледаме примери за писане на бенкодиращи данни.
Нека започнем с правилата за писане на низове. Като цяло форматът за запис на низови данни изглежда така:
Има няколко предварително дефинирани директиви в спецификацията на файловата структура на метаданните:
Имам компонент, опънат във формата TPageControl с две създадени отметки. Първо ("Съдържание на торент») Компонентът е разположен TListView. В този компонент ще съхраним името и размерите на файловете, които по-късно ще добавим към торента. За удобство на показването зададох свойството ViewStyle на TListview на vsReport и създадох три колони: файл, размер, път. Във втория раздел съм поставил осем компонента TEdit, един TMemo и едно копие TDateTimePicker.