Blocking Socket, идею надо, плз.
Сделал клиент и сервер которые файлами обмениваются, но вот проблема, надо на клиенте прогресс бар сделать, а сокет ничего не возвращает пока читать не закончит. То есть на сервере надо что-то сделать чтобы файл шел кусками, на клиенте уже все написано для того чтобы после каждого куска рисовать на прогрессБаре.
Я пробовал читать файл в буфер и потом слать его оттуда кусками, это не помогло.
Пробовал слать ответ после наждого куска серверу, а сервером отправлять новый пакет только после только после получения ответа, это не помогло.
Пробовал читать файл с диска кусками и слать, это помогло, но это плохое решение данной проблемы, я думаю понятно почему.
Короче если есть идеи подкиньте плз, буду оч благодарен!
Передавать кусками, после получения каждого - ответ. Это и есть наилучший способ. Копай в этом направлении. Можно даже CRC для каждого куска подсчитывать.
Тк ведь делал уже так, и киент только в конце весь прогрессбар прогоняет когда файл сохраняется, а если на сервере выводить ответы, то он тоже передает и только когда закончит передачу вываливает все ответы.
А что такое CRC?
Тк ведь делал уже так, и киент только в конце весь прогрессбар прогоняет когда файл сохраняется, а если на сервере выводить ответы, то он тоже передает и только когда закончит передачу вываливает все ответы.
А что такое CRC?
Ну значит, прогрессбар не совсем так ставишь. Пусть в начале сервер передает пакет с размером файла, этот размер принимаешь как максимальное значение програссбара. А потом, так как каждый кусок известной длины, увеличиваешь текущее значение прогрессбара.
А CRC - это контрольная сумма. Позволяет с определенной вероятностью (что-то около 99.9%), определить правильность передачи. Ее высчитывают и приемник и передатчик. Если совпало - все ок
Через одну передаем собственно файл, а через другую - вспомогательную инфу.
Тогда и кусками передавать не обязательно, просто по второй паре пускать статус: сколько байтов прошло, сколько осталось, какой полный размер файла и т.п.
Ну значит, прогрессбар не совсем так ставишь. Пусть в начале сервер передает пакет с размером файла, этот размер принимаешь как максимальное значение програссбара. А потом, так как каждый кусок известной длины, увеличиваешь текущее значение прогрессбара.
Да все так вроде, сначала длину файла, потом после ответа клиента сам файл.
Свежая идея! Нужно использовать ДВЕ пары сокетов. Через одну передаем собственно файл, а через другую - вспомогательную инфу.
Тогда и кусками передавать не обязательно, просто по второй паре пускать статус: сколько байтов прошло, сколько осталось, какой полный размер файла и т.п.
Спасибо за идею! Я попробую.
Но больше всего меня волнует вопрос: почему когда я кусками читал с диска и отправлял все работало??? Типа из-за того что винт - это узкое место и винда понимает что ждать не правильно и шлет сообщение через сокет??? Так чтоли? Может тогда есть какая-нибудь функция чтобы сказать винде: не жди собака Мелкомягкая, шли так...