Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Всё о Direct Connect _ $ADCSND узнать точный размер передаваемого сжатого сегмента

Автор: kadet.89 24.5.2012, 2:57

Отсылаю в сокет примерно такое:
$ADCGET file TTH/PPUROLR2WSYTGPLCM3KV4V6LJC36SCTFQJFDJKA 0 1000 ZL1|

Получаю ответ:

$ADCSND file TTH/PPUROLR2WSYTGPLCM3KV4V6LJC36SCTFQJFDJKA 0 1000 ZL1|
И начинаю считывать эти 1000 байт. Но отсылатель со своей стороны сжимает 1000 байт и выходит меньше.
Таким образом считав ~900 байт всё зависает в ожидании последних 100 байт.
Вопрос прост, как узнать сколько байт придет? Простым таймаутом проблему не решить т.к. бывают подзависания да и нехорошо ступорить программу.

Автор: Alexey 24.5.2012, 13:39

В http://mydc.ru/topic2702.html ответа так и не нашли.

Автор: kadet.89 24.5.2012, 15:43

Пока точно не знаю, но похоже надо использовать поточное разжатие на сокете, тогда на выходе уже будет нужное количество байт.

Автор: Setuper 24.5.2012, 16:31

Внимательно смотри исходники клиента

Автор: kadet.89 24.5.2012, 17:18

Цитата(Setuper @ 24.5.2012, 17:31) *
Внимательно смотри исходники клиента

Не, в это дело я точно не полезу, там чёрт ногу сломит. Проще и быстрее самому разобраться, к тому же у меня уже есть на половину рабочий вариант. Использую InflaterInputStream (это в JAVA) к сожаление режет utf-8 символы, думаю это мой косяк. Еще один вариант использовать Inflater и после каждого распакованного байта делать проверку на законченность распаковки...думаю в других клиентах сделано аналогично, но проверять не буду.

Автор: kadet.89 29.5.2012, 0:03

Не хочу отдельно тему создавать для простого вопроса
$ADCGET file TTH/PPUROLR2WSYTGPLCM3KV4V6LJC36SCTFQJFDJKA 1024 2048 ZL1|
первое число - номер байта с которого нужно передавать файл, а второе? номер последнего байта или количество байт от первого числа?

Автор: Alexey 29.5.2012, 0:20

http://mydc.ru/r/?http://wiki.mydc.ru/ADC_GET