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

Ваш аккаунт

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

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

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

Скачивание файла через winsock

9.1K
25 апреля 2010 года
motorw
134 / / 15.12.2009
Собственно, кто подскажет, как это делать?
В обычном диалоговом окне задается в текстовое поле ссылка на файл. Скачивание через http. Дошел до коннекта до сервера, а дальше не знаю, что делать и как.. Построчно читать файл и записывать в локальную папку? Предложите свои варианты, если можно, с кодом. Буду очень признателен.
253
25 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Если качаете с интернета, то можно использовать WinInit - там уже всё написано, надо только вызвать нужные функции. Например, получить файл по HTTP можно так: InternetOpen -> InternetOpenURL -> InternetReadFile -> InternetCloseHandle (от OpenURL) -> InternetCloseHandle (от Open).
9.1K
25 апреля 2010 года
motorw
134 / / 15.12.2009
Цитата: Proger_XP
Если качаете с интернета, то можно использовать WinInit - там уже всё написано, надо только вызвать нужные функции. Например, получить файл по HTTP можно так: InternetOpen -> InternetOpenURL -> InternetReadFile -> InternetCloseHandle (от OpenURL) -> InternetCloseHandle (от Open).


Сейчас не могу подойти и узнать точно к компу, поэтому вопрос:
Псевдак:

 
Код:
FILE f=fopen(filename, "w");
InternetOpen ...
InternetOpenUrl...
InternetReadFile...
fwrite(....,f);
fclose..
InternetCloseHandle..
InternetCloseHandle..

Так можно?
253
26 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: motorw

Так можно?


Да, схема такая. Правда, InternetReadFile() + fwrite() лучше сделать в цикле, читающем/пишущем куски, скажем, по 4 КБ - для скорости.

Плюс, fclose() лучше перенести после всех InternetClose, раз fopen() у тебя перед ними, ну это мелочи.

9.1K
26 апреля 2010 года
motorw
134 / / 15.12.2009
Сделал все. Про цикл Я додумался сам, спасибо :)
Но возникла проблема. Качает файл размером в два раза больше. И после первого fwrite вылетает из программы.
Код:
Код:
bool GetInetFile(char *fileURL, char* FileName)
{
    FILE* file;
    MessageBox(0,"","",0);
    GetFileName(fileURL,FileName);
    file=fopen(FileName, "w+");
    const int BufferSize=1024;
    HINTERNET hSession, hURL;
    char* Buffer[BufferSize];
    DWORD BufferLen;
    char* sAppName="FastDownload";
    hSession=InternetOpen(sAppName,
    INTERNET_OPEN_TYPE_PRECONFIG,
    NULL, NULL, 0);

    hURL=InternetOpenUrl(hSession,
    fileURL,
    NULL,0,0,0);
    while(BufferLen!=0)
    {
        InternetReadFile(hURL,Buffer, BufferSize, &BufferLen);
                  MessageBoxA(0,"Read","Read",0);
        fwrite(Buffer,BufferSize,BufferLen,file);
    }
    fclose(file);
    InternetCloseHandle(hURL);
    InternetCloseHandle(hSession);
    return true;
}

Вообще, должен быть режим записи wb или w+b. Но при этом у меня файл создается пустой(весит 0 байт). И так всегда. Работает только тупо r и w. Вот такая беда :(
И еще вопрос: какой BufferLen(кол-во записываемых байт в fwrite) нужно писать, ведь нам неизвестен размер скачиваемого файла?

upd:
Немного разобрался. Файл скачал. zip.
Но:
1. В свойствах, размер файла "на диске" такой же, как и должен быть. Но обычный размер файла(что выше находится) отличается от нормального в большую сторону).
2. В оригинальном архиве 6 файлов и одна папка с файлами, а в моем скачанном - только 1 файл. И при открытии выскакивает уведомление "Неожиданный конец архива".
Что делать? :)
9.1K
26 апреля 2010 года
motorw
134 / / 15.12.2009
Скачал другой файл, не архив. В нем добавилось 16 лишних строчек. Что за фигня..
253
26 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: motorw
Скачал другой файл, не архив. В нем добавилось 16 лишних строчек. Что за фигня..


По-моему у тебя ошибка в fwrite(): fwrite(Buffer,BufferSize,1,file);

Режим открытия тебе нужен "wb", "w+" - для чтения+записи.

У меня вот как сделана подобная функция (Delphi):

Код:
function InternetDownload(URL: String; const Dest: TStream): Boolean;
const
  BufSize = 2048;
var
  InetHandle, URLHandle: Pointer;
  Buf: array[1..BufSize] of Byte;
  BytesRead: DWord;
begin
  InetHandle := InternetOpen('any user agent', INTERNET_OPEN_TYPE_PRECONFIG,
                             NIL, NIL, 0);
  try
    URLHandle := InternetOpenURL(InetHandle, PChar(URL), nil, 0, 0, INTERNET_FLAG_NO_UI);
    try
      repeat
        if not InternetReadFile(URLHandle, @Buf, SizeOf(Buf), BytesRead) then
          BytesRead := 0;
        Dest.WriteBuffer(Buf, BytesRead);
      until BytesRead = 0;

      Result := True;
    finally
      InternetCloseHandle(URLHandle);
    end;
  finally
    InternetCloseHandle(InetHandle);
  end;
end;
11
26 апреля 2010 года
oxotnik333
2.9K / / 03.08.2007
Цитата: motorw
Скачал другой файл, не архив. В нем добавилось 16 лишних строчек. Что за фигня..


открывай файл в бинарном режиме "wb+"
ps: пример качалки

9.1K
26 апреля 2010 года
motorw
134 / / 15.12.2009
В том-то и дело, что надо w+b или wb+. Но ни одно, ни другое не работает. Не знаю, в чем беда :(
11
26 апреля 2010 года
oxotnik333
2.9K / / 03.08.2007
Цитата: motorw
В том-то и дело, что надо w+b или wb+. Но ни одно, ни другое не работает. Не знаю, в чем беда :(


пример смотрел? там "wb" стоит и все работает

9.1K
26 апреля 2010 года
motorw
134 / / 15.12.2009
Да, смотрел пример, да, wb там. Я не компилил. У меня не работает.
upd: Вы не поверите. Вчера все режимы перепробовал - не записывал, кроме как w+. Поклясться могу. Сейчас заработало. Больше всем спасибо! Кто может объяснить такое сверхестественное явление?
253
26 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Может он файл создать не мог, только открыть существующий?
9.1K
26 апреля 2010 года
motorw
134 / / 15.12.2009
А почему тогда сейчас смог?
upd: Подскажите, а как посчитать скорость скачивания?
Также хотелось бы узнать, как избавиться от того, что окно виснет во время скачивания?
upd2: С потоками я разобрался, чтобы не висло. Теперь интересует вопрос скорости скачивания и скачивания по частям. В коде oxotnik333 оно есть, но там было через socket, а не InternetOpen.. И так же о том, как узнать размер.
253
26 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Скорость скачивания можешь просто считать в callback, которую ты можешь передать в InternetReadFile - засекай время и дели на его размер буфера.

Размер файла можешь получить из заголовков юзая HttpQueryInfo с HTTP_QUERY_CONTENT_LENGTH, пример тут.
9.1K
27 апреля 2010 года
motorw
134 / / 15.12.2009
Там написано:
Цитата:
HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH, _
ByVal strBuffer, lBufLen, 0)


А где мне взять хэндл файла? Он же только локальный.

253
27 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: motorw
А где мне взять хэндл файла? Он же только локальный.


Смотрим MSDN:

Цитата:
hRequest - Handle returned by HttpOpenRequest or InternetOpenUrl.

9.1K
27 апреля 2010 года
motorw
134 / / 15.12.2009
Блин, не работает.
Напиши мне код человеческий пожалуйста.
upd: Додумался. Работает.
9.1K
27 апреля 2010 года
motorw
134 / / 15.12.2009
Как правильно сделать прогресс бар, если имеется:
 
Код:
while(BufferLen!=0)
            {
                InternetReadFile(hURL,Buffer, BufferSize, &BufferLen);
                SendMessage(prgbar, PBM_SETSTEP, (WPARAM)1,BufferSize);
                fwrite((char*)&Buffer,sizeof(char),BufferLen,file);
                SendMessage(prgbar, PBM_STEPIT, 0,0);
            }

И какой SetRange установить?

upd:
Как создать изображение на кнопке? Если она в ресурсах.
И как узнать размер с фтп?
upd:
Не качаются .exe-файлы. Почему?
9.1K
30 апреля 2010 года
motorw
134 / / 15.12.2009
topic up.
253
01 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Сколько вопросов... идём в гугл.

Цитата: motorw
Как создать изображение на кнопке? Если она в ресурсах.


Это уже на форуме мильон раз обсуждалось.

Цитата: motorw
И как узнать размер с фтп?


Набираем в гугле фразу "Retrieves the size of a file from the FTP site" и открываем 4-й сайт сверху.

Цитата: motorw
Не качаются .exe-файлы. Почему?


С таким же успехом можно спросить почему небо синее. Может какой-то фильтр блокирует exe, да и что вообще значит, что не качается? Приходят битыми, не приходят (возврат из функций Internet*) или что-то ещё?

9.1K
03 мая 2010 года
motorw
134 / / 15.12.2009
http://www.killprog.com/fdrve.html что-то не вдохновило. 4-й сайт сверху. В гугле.
С exe разобрался и с кнопками тоже в тот же день.
Вот теперь вопрос такой: Как правильно узнать размер уже скачанной части?
Если делать bytesread+=strlen(Buffer); - то не сходится с размером, полученным по http-запросу.
Блин. Опять решил сразу после того, как написал. Додумался сделать так:
bytesread+=fwrite((char*)&Buffer,sizeof(char), BufferLen,file);

Осталось лишь узнать размер с фтп...
60K
19 мая 2010 года
Deerhrthjz
3 / / 14.05.2010



Цитата:

фото голых ног девушек - Скачать бесплатно 3d порно анимэ голая даша букина на фото голая наталья бочкарёва - Онлайн ролики извращенцев Порно видео онлайн в гаражах частное африканки голые, сексуальные девочки в блестящих чулках фото, порно видео для телефонов скачать бесплатьно - кастинг секс порно онлайн дед трахается сисястые целочки, с хуя ли баня упала - трахнуть шимпанзе, гиперсексуальность фото - порно с ириной розановой, Письки киски до 16 Скачать порнофото беременные - бесплатная скачка эротических картинак высокого качества. порно латиноамериканки. - средний был гермафродит сам ебёт и сам родит, Смотреть инцесты без смс и без регистрации тетка и племянник порно скачать Скачать секс с женщиной онлайн порно видео бесплатно уроки лизания - на свиданки сын трахнул маму - Смотреть онлайн порно видео скрытая камера порно.фильмы бесплатно аниме. трахают жанну фриске - порно насти мельниковой порно с участием героев диснея - клитор девочки онлайн. смотреть онлайн лесби ануслинг бабушки с внуками порно -

Порноонлайн медосмотр худенькие голые женщины, порно онлаин взрослие - бесплатное порно в онлайм. анальные принцессы онлайн ей нравится когда ее лижут порно онлайн - Скачать порнофото беременные - беплатное порно культуристки, пососи эротические фото толстушек бесплатно без регистрации, Порно ролики взрослых волосатых женщин фото розги. порно сайт сучка ру 2040 porno онлайн - секс со старыми смотреть видео бесплатно без регистрации и смс смотреть фото порно Секс мастурбация во время беременности видео Смотреть русское видео порно зрелых домохозяек ххх фото курниковой Секс видио смотртеть бесплатно Скачать порно быстро и бесплатно без регистрации Актриса ольга полякова порно смотреть русский инцест бесплатно онлайн Скачать порнофото беременные - выебал в анал собственную мать bezplatno короткая ебля без смс и регистрации, ролики порно безплатно качать, он трахает бабушку смотреть онлайн, минет молодой брюнетки фото онлайн - бесплатно главная пизда, Скачать порнофото беременные -



брат трахнул младшую сестру видео смотреть онлайн - трах брат сестру, Бесплатно.Порно.Видео.Без смс.Пьяная мама и ее с Видио эротика онлайн бесплатно порно со сзнаменитостями - все что мне в ней казалось загадочным и богатым внутренним миром оказалось просто ебанутостью. смешные порно фото приколы, девственые письки фото онлайн - порка кнутом видео скачать. интимные места видео - показать ранеток в сексе, Порно сотреть онлан скачать бесплатно порно с claudia wennstrom, Бесплатно порно-видео плевы лишили порно онлайны мамы - aion где вставляет божественный камень, отличный русский фистинг rapidshare - порно секретарш скачать бесплатно, видео порно кэйти прайс, домашнее видео порноролики эротичиские фота блондинак, порно бесплатно без регистрации смотреть онлайн минет, порно фото голые телки попки под юбкой трусики галерея. порно рабы - stalker сталкер eli cross vivid 2008 г all sex dvdrip, порно звезды бесплатное фото Бесплатно скачать жесткое порно видео

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