Страница 1 из 1

MFC WinINET InternetReadFile-не получается полностью загрузк

Добавлено: 03 сен 2004, 12:21
iAlexander
Проблема состоит в следующем:
Используя как пример статью http://rsdn.ru/article/inet/inetapi.xml, сделал быстро загрузчик файлов из Интернета. Для начала пробовал скачивать на диск файлы с localhost'а - замечательно работает.
Но как только попробовал залить реальный файл из Интернета (300 Кб) - начались проблемы. Чтение файла обрывается до нормального завершения (по-разному - 60Кб, 130 Кб,...). Соединение модемное. Пробовал ставить буфер чтения 65535, 350000, 4048 - не помогает. Причем если буфер меньше - передается меньше байт.
Что можно сделать?
Вообще, мне не совсем в данном случае понятен принцип:

Код: Выделить всё

(Пока читается) {
      Читать();
}
Т.е. функция Читать() - InternetReadFile() учитывает непостоянные скорости передачи данных? Если да, то понятно, но мне почему-то теперь кажется, что не очень учитывает. Может, я и неправ.

И еще вопрос: в статье акцентируется необходимость установленного IExplorer'а.
Значит ли это, что функции WinInet используют его настройки? Прокси, например?[/code]

Добавлено: 03 сен 2004, 13:12
AiK
Дело в том, что контент тебе передаётся кусками (chunk'ами), а не непрерывно. На качественном соединении (даже модемном) размеры этих chunk'ов большие и проблем не возникает. На хреновом соединении chunk'и маленькие и целый класс функций от мелкомягких ведёт себя некорректно (оно и понятно - где им, бедным, плохое-то соединение взять? :) ) Симптомы именно такие, как у тебя. Один из наших админов, а именно Vasilisk знает суть проблемы досконально. Он нас не часто балует своим присутствием, так что попробуй очень вежливо стукнуться к нему в личку. Решения, на сколько я помню, два: одно неправильное - использовать протокол HTTP1.0, другое ( едиснтвенно верное) - перейти на использование непосредственно сокетов (WinSocks).

Добавлено: 06 сен 2004, 16:42
iAlexander
Представляешь, в чем прикол?
Сделал закачку, используя WinSocks. То же самое!!!
Закачка обрывается - и дальнейшие попытки принять данные из сокета безуспешны.
В отчаянии я стал качать файлы с других серверов (до этого я использовал один доступный мне частный хостинг).
И здесь все работает!
Поразительно, но здесь файлы скачивались нормально и гораздо большего размера. Вот такие гримасы судьбы.. (зато у меня теперь библиотечки и WinInet, и WinSocks :o ) Худа без добра не бывает.