Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Blocking Socket, идею надо, плз.

1.7K
17 апреля 2006 года
ilyes
181 / / 22.02.2006
Здравстуйте!!!

Сделал клиент и сервер которые файлами обмениваются, но вот проблема, надо на клиенте прогресс бар сделать, а сокет ничего не возвращает пока читать не закончит. То есть на сервере надо что-то сделать чтобы файл шел кусками, на клиенте уже все написано для того чтобы после каждого куска рисовать на прогрессБаре.

Я пробовал читать файл в буфер и потом слать его оттуда кусками, это не помогло.

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

Пробовал читать файл с диска кусками и слать, это помогло, но это плохое решение данной проблемы, я думаю понятно почему.

Короче если есть идеи подкиньте плз, буду оч благодарен!
5.3K
17 апреля 2006 года
r000n_m
177 / / 26.02.2006
Передавать кусками, после получения каждого - ответ. Это и есть наилучший способ. Копай в этом направлении. Можно даже CRC для каждого куска подсчитывать.
1.7K
17 апреля 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by r000n_m
Передавать кусками, после получения каждого - ответ. Это и есть наилучший способ. Копай в этом направлении. Можно даже CRC для каждого куска подсчитывать.



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

А что такое CRC?

5.3K
17 апреля 2006 года
r000n_m
177 / / 26.02.2006
Цитата:
Originally posted by ilyes
Тк ведь делал уже так, и киент только в конце весь прогрессбар прогоняет когда файл сохраняется, а если на сервере выводить ответы, то он тоже передает и только когда закончит передачу вываливает все ответы.

А что такое CRC?


Ну значит, прогрессбар не совсем так ставишь. Пусть в начале сервер передает пакет с размером файла, этот размер принимаешь как максимальное значение програссбара. А потом, так как каждый кусок известной длины, увеличиваешь текущее значение прогрессбара.

А CRC - это контрольная сумма. Позволяет с определенной вероятностью (что-то около 99.9%), определить правильность передачи. Ее высчитывают и приемник и передатчик. Если совпало - все ок

5.3K
17 апреля 2006 года
r000n_m
177 / / 26.02.2006
Свежая идея! Нужно использовать ДВЕ пары сокетов.
Через одну передаем собственно файл, а через другую - вспомогательную инфу.
Тогда и кусками передавать не обязательно, просто по второй паре пускать статус: сколько байтов прошло, сколько осталось, какой полный размер файла и т.п.
1.7K
18 апреля 2006 года
ilyes
181 / / 22.02.2006
Цитата:
Originally posted by r000n_m
Ну значит, прогрессбар не совсем так ставишь. Пусть в начале сервер передает пакет с размером файла, этот размер принимаешь как максимальное значение програссбара. А потом, так как каждый кусок известной длины, увеличиваешь текущее значение прогрессбара.



Да все так вроде, сначала длину файла, потом после ответа клиента сам файл.

Цитата:
Originally posted by r000n_m
Свежая идея! Нужно использовать ДВЕ пары сокетов. Через одну передаем собственно файл, а через другую - вспомогательную инфу.
Тогда и кусками передавать не обязательно, просто по второй паре пускать статус: сколько байтов прошло, сколько осталось, какой полный размер файла и т.п.



Спасибо за идею! Я попробую.

Но больше всего меня волнует вопрос: почему когда я кусками читал с диска и отправлял все работало??? Типа из-за того что винт - это узкое место и винда понимает что ждать не правильно и шлет сообщение через сокет??? Так чтоли? Может тогда есть какая-нибудь функция чтобы сказать винде: не жди собака Мелкомягкая, шли так...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог