myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Скачивание файла большого объема с нескольких источников

Теги
Нет тегов для показа
nail
сообщение 23.7.2012, 22:32
Сообщение #1


Начинающий
*

Группа: Пользователи
Сообщений: 25
Регистрация: 27.11.2009
Пользователь №: 5 183
Спасибо сказали: 1 раз




Пишу свой клиент на java с 0. При скачивании файла размером ~500 мб с ~10 человек файл всегда после скачивания получается нормальным, т.е. tth совпадает. Но если файл больше гига и 30-40 источников, то файл при скачивании ломается и в результате ттш у файла меняется. Выявить ошибки в алгоритме я не смог и подозреваю что их там нет. Собственно вопрос - это нормально что при передаче гигабайта парочка байт может побиться? какова вероятность таких событий и как с этим борются в существующих дц клиентах? Существуют ли способы проверять на достоверность скачанные блоки?
------------------------------------------------------
Я сравнил битый и не битый файлы и оказалось что некоторые пользователи специально вместо нужного сегмента шлют мусор. Думаю с этой проблемой не только я сталкивался... как же ее решают?
Go to the top of the page
+Quote Post
Setuper
сообщение 24.7.2012, 9:21
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1694 раза




http://mydc.ru/topic5202.html
Go to the top of the page
+Quote Post
nail
сообщение 24.7.2012, 17:54
Сообщение #3


Начинающий
*

Группа: Пользователи
Сообщений: 25
Регистрация: 27.11.2009
Пользователь №: 5 183
Спасибо сказали: 1 раз




Спасибо, думаю мне это тоже пригодится. Пока не проверил, но мне кажется проблема еще может быть в одинаковых адресах у источников, если распознавать их только по адресу (без порта), то точно не определить кто есть кто и передаваемые сегменты будут перемешиваться. Однако даже в таком случае это не решает проблему с проверкой принимаемых данных. Ведь я запрашиваю определенный сегмент, а на деле пользователь может слать вместо него что ему заблагорассудится... таким образом можно сделать бота который будет бить все закачки в сети выдавая фейковые сегменты за реальные. Если в Utorrent'е это решается сверкой хеша каждого сегмента, то в дц подобной системы проверки просто нет (может и есть, но я не нашел)
Go to the top of the page
+Quote Post
nail
сообщение 27.7.2012, 3:25
Сообщение #4


Начинающий
*

Группа: Пользователи
Сообщений: 25
Регистрация: 27.11.2009
Пользователь №: 5 183
Спасибо сказали: 1 раз




Поковырял я свой код 3 дня, удалось немного оптимизировать и отловить одно исключение, но проблема сохранилась.. если выкачивать файл весом ~2 гига с 20 источников, то с вероятностью 50% в итоге будет получен файл с другой ттш. Я использую сегменты для записи на винчестер 16кб, запросы делаю по 4 мб (256 сегментов) в результате в скачанном файле получаю ~1 битый кусок. Для проверки добавил сверку ADCGET и ADCSND, т.е. пользователи шлют мне то что было заказано. Вопрос в первую очередь к тем кто занимался этой задачей. Это у меня в коде какой то косяк или это нормально что сегменты могут быть побиты и во всех существующих дц клиентах выполняется перепроверка скачанных сегментов? Быть может TCP не такой и идеальный и при передаче данных бывает что не все байты доходят?
Меня также интересует если у пользователя было запрошено 4мб данных, а он отослал чуть меньше и его кикнуло по таймауту, как в таких случаях поступают дц клиенты? всё что было выкачано пускается на ветер или же записывается на диск? В моем алгоритме если приходит 3,99 мб, то на винт записываются целые сегменты (16384*255) а последний, недокачанный 256-ой сегмент выкидывается. Но быть может так нельзя делать? Может пользователь и отослал 4 мб, но маленький кусок из середины выпал и дошло только 3,99 мб?
Go to the top of the page
+Quote Post
Setuper
сообщение 27.7.2012, 9:41
Сообщение #5


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1694 раза




Ковыряй исходники клиентов.
Я вообще не пойму, ты что изобретаешь свой велосипед?
Не просто же так дедушкой всех клиентов является DC++ клиент. Вот и посмотри как там это реализовано.
Я полагаю, что большинство разработчиков клиентов не разбиралось в алгоритмах, а просто унаследовали их полностью от дедушки.
Go to the top of the page
+Quote Post
nail
сообщение 27.7.2012, 16:27
Сообщение #6


Начинающий
*

Группа: Пользователи
Сообщений: 25
Регистрация: 27.11.2009
Пользователь №: 5 183
Спасибо сказали: 1 раз




Да, но ведь и большинство клиентов написаны на C++, а у меня Java. Я с самого начала так и хотел сделать, но открыв исходник DC++ я увидел там тысячи мелких файлов с непонятным содержимым. Чтобы найти нужные мне куски да и к тому же понять что в них и как происходит уйдет очень много времени. А свой велосипед я сконструировал за 4 дня, с файлами меньше половины гига работает замечательно.
Пораскинув мозгами я понял что бывает такая ситуация. Я делаю запрос на соединение с пользователем, жду секунду, если ответа нет делаю второй. Затем приходит ответ на первый запрос и начинается передача файла. В процессе передачи файла пользователь шлет ответ на 2-ой запрос и этот кусок ($Support...) записывается в файл
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Скрипт загрузки файла
1 FreeNas 1 635 21.7.2015, 10:58 Посл. сообщение: HackFresse
No New Posts Сохранение и загрузка таблиц в файл (из файла)
7 daslex 3 711 22.11.2013, 12:28 Посл. сообщение: MIKHAIL
No new Topic has attachmentsПогода для нескольких городов
API1, API2 | Скрипт погоды для нескольких городов
17 Damaks 10 217 9.10.2012, 13:48 Посл. сообщение: Sergey613
No New Posts Интернет с нескольких IP
Получение интернета с разных IP адресов на один ПК
6 kewell 3 711 25.7.2012, 21:58 Посл. сообщение: mariner
No New Posts От: Погода для нескольких городов
От темы с ID: 4644
3 ProGeTTo 2 833 20.11.2011, 19:04 Посл. сообщение: ustas
No New Posts Переход с файла *.tbl в базу данных SQL
SQL
0 kks 2 095 29.3.2011, 14:28 Посл. сообщение: kks
No New Posts Парсинг файла списка от PtokaX
5 dimajak 4 277 24.12.2010, 14:14 Посл. сообщение: dimajak
No new Скачивание файл-листа, nmdc
Последовательность команд
16 HackFresse 11 852 3.11.2010, 12:48 Посл. сообщение: Atlant
No New Posts ВАЖНО: Topic has attachmentsРусский первод .lng файла
Обновил
4 Maximum 6 525 26.10.2010, 15:55 Посл. сообщение: Maximum
No New Posts Скрипт который банит за скачивание порно
2 CrackWG 3 840 11.1.2010, 18:17 Посл. сообщение: Perspect
No New Posts ADCGET-ADCSND и размер файла
4 sweeny 5 992 23.11.2009, 13:27 Посл. сообщение: sweeny
No New Posts Запись файла
9 Net_Strannik 5 568 30.10.2009, 9:46 Посл. сообщение: Net_Strannik
No New Posts Topic has attachmentsОт: Русский первод .lng файла
От темы с ID: 2529
4 Invisible 2 914 6.10.2009, 16:06 Посл. сообщение: Invisible
No New Posts Как продолжить скачку недокаченного файла?
dcmtp
4 PaN 4 383 12.8.2009, 19:35 Посл. сообщение: Invisible
No New Posts Скачивание с форума
Проблема с запросом авторизации
4 Uncle_Dif 3 310 17.7.2009, 13:23 Посл. сообщение: Delion

 



RSS Сейчас: 23.10.2017, 5:21