72 / 72 / 6
Регистрация: 16.06.2012
Сообщений: 220
|
||||||
1 | ||||||
.NET 4.x Как разобраться с кодировками в консольном торрент-клиенте19.08.2012, 22:12. Показов 1306. Ответов 9
Метки нет (Все метки)
Здравствуйте, о великие и могучие умы данного форума. Проблема возникла на моем пути и не решается легко. Консультация Ваша потребовалась...
Так..Если серьезно, то пишу консольный торрент-клиент и как обычно, у меня с шарпом одна проблема - я плохо работаю с кодировками. Суть вопроса - на запрос трекеру подается SHA-1 хешкод (20 символов), причем их необходимо закодировать в виде %hh, где h - шестнадцатеричная цифра. (кодировать необходимо, если они не входят в определенное множество символов. RFC 1738) Для прогона я взял торрент ubuntu - в нем выдрал все нужное, перекодирование сделал так
Encoding.UTF8 - 16 бит на символ - многовато( Encoding.Default (то бишь, ANSI)- самая правдоподобная, но тем не менее ответ был - "d14:failure reason63:Requested download is not authorized for use with this tracker.e" То бишь у меня трабл с описанием... И да, пробовал все символы переводить в представление %hh - также не помогло... Буду рад Вашим мыслям по данному поводу
0
|
19.08.2012, 22:12 | |
Ответы с готовыми решениями:
9
Проблема с кодировками (с русскими буквами) в консольном приложении. После 15 минут пропадает Интернет в браузере и торрент-клиенте Не могу разобраться в чем у меня проблема. Не выводит оценку в консольном приложении когда пользователь обрывает прием информаци на клиенте - виснет IE на клиенте |
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
19.08.2012, 22:30 | 2 |
sha1.ComputeHash выдает тебе массив байт
чтоб перегнать его в строку нужного вида достаточно использовать System.Web.HttpUtility.UrlEncode есть только сама по себе структура-словарь "info", после ее чтения с нее берется хеш
1
|
47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
|
|
19.08.2012, 22:31 | 3 |
Попробую внести для себя ясность.
1) В какой кодировке общается сервер? 2) В какой кодировке ты получаешь SHA-1?
0
|
72 / 72 / 6
Регистрация: 16.06.2012
Сообщений: 220
|
|
19.08.2012, 22:55 [ТС] | 4 |
m0nax, Hash уже есть в файле.
bumbaram, Имеется описание, (BitTorrent Protocol), что символы записаны в ASCII, однако, т.к. он содержит 7 бит, то (касаемо SHA1) 1 бит остается пустым, символы, где этот бит обращен в 1 и записываются как %hh. Чтение происходит в формате ANSI. Сервер работает (как правило) в том же режиме. Добавлено через 11 минут m0nax, pieces - строка длиной 20*pieces_length, где каждые 20 символов - SHA1 хеш части. пруф http://jonas.nitro.dk/bittorre... t-rfc.html Добавлено через 1 минуту System.Web.HttpUtility.UrlEncode - не допускает имя класса - HttpUtility.. Дебильный вопрос (я понимаю), но HttpUtility действительно у меня не определяется как класс... В чем может быть дело? Добавлено через 8 минут Так... с HttpUtility разобрался... счас через него попробую
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
19.08.2012, 22:55 | 5 |
ну да, тут все запущенней чем я подумал
info_hash который отправляют на трекер и pieces в торрент файле это абсолютно разные вещи торрент файл это не текстовый файл, его нельзя читать как текстовый файл, к нему(целиком) нельзя применять какие либо кодировки в кодировке ASCII там записаны только сами элементы формата, например вот тут жирным это ASCII вот как раз поля pieces это и есть просто последовательность байтов
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
19.08.2012, 22:55 | 6 |
0
|
72 / 72 / 6
Регистрация: 16.06.2012
Сообщений: 220
|
|
19.08.2012, 23:06 [ТС] | 7 |
m0nax, все же не дурак я... работал с ним через BinaryReader... Не текстовый файл....
Добавлено через 9 минут m0nax, Спасибо UrlEncode решил проблему...
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
19.08.2012, 23:06 | 8 |
короче, info_hash это хеш со всего блока info в торрент файле
в этом блоке кроме всего прочего лежат блоки pieces, которые сами по себе является набором хешей для частей файлов со всего этого блока со всеми потрохами берется sha1 хеш и получается info_hash, который потом кодируется UrlEncode отправляется на трекер
0
|
47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
|
||||||
19.08.2012, 23:07 | 9 | |||||
Мож я че не понял. Но допустим ты получил строку с sha-1 от какого-то файла. Потом
0
|
72 / 72 / 6
Регистрация: 16.06.2012
Сообщений: 220
|
|
19.08.2012, 23:08 [ТС] | 10 |
Спецификацию протоколов читать умею =)
Я замудрил больно с переводом.... Спасибо за подкинутый класс HttpUtility
0
|
19.08.2012, 23:08 | |
19.08.2012, 23:08 | |
Помогаю со студенческими работами здесь
10
Как работать с кодировками в PHP? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |