Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скачивание файла по http на winsock 
:(
    Опции темы
flintstone
Дата 19.12.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



Здравствуйте!
Может кто сталкивался со следующей проблемой:
Нужно скачать файл с Web-сервера используя winsock. С реализацией всё вроде понятно, 
заносим в массив параметры HTTP протокола.
Отправляем на сервер, и ждём получения ответа. 
Затем парсим тело ответа на наличие файла, заносим его в массив, и пытаемся записать в файл. 
Вроде в ответе содержиться массив действующего файла, а записывается какая-то чушь. 
Как записать правильно файл?
Код
int file_download(viod) // ф-ия скачки файла
{
   char sendbuffer[1024], recvbuffer[65535];

        strcpy(sendbuffer, "GET ");
        strcat(sendbuffer, "http://test1.ru/1.gif");
        strcat(sendbuffer, " HTTP/1.0\r\nHost: ");
        strcat(sendbuffer, "test1.ru");
        strcat(sendbuffer, "\r\n\r\n");

        memset(recvbuffer,0,sizeof(recvbuffer)-1);
        MessageBox(0,sendbuffer,"Send Buffer",0);

    SOCKET s = socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN webaddr;
        webaddr.sin_addr.S_un.S_addr = resolve("test1.ru");
        webaddr.sin_family = AF_INET;
        webaddr.sin_port = htons(80);
    if(connect(s, (struct sockaddr *)&webaddr,sizeof(SOCKADDR_IN))) return -1;

    send(s, sendbuffer, strlen(sendbuffer),0);
    Sleep(2000);

    int i;
    while(i = recv(s,recvbuffer+strlen(recvbuffer),1,0))  // получаем ответ
    {if (i == SOCKET_ERROR) return -1;}
         MessageBox(0,recvbuffer,"Answer of Web Server",0);

      // parsing...
    char *temp;

    for(int i = 0; recvbuffer[i]!=0; ++i)
    {
        if((recvbuffer[i]=='\r')&&(recvbuffer[i+1]=='\n')&&
            (recvbuffer[i+2]=='\r')&&(recvbuffer[i+3]=='\n'))
        {temp = (char*)&recvbuffer[i]+4; break;}
    }
        MessageBox(0,temp,"Answer of Web Server",0);

        FILE *stream= fopen("1.gif", "wb");
          //fprintf(stream, temp);
          fwrite(&temp, sizaof(temp), 1, stream);
          fclose(stream);
     return 0;
}


Это сообщение отредактировал(а) Олег2005 - 20.12.2008, 13:22
PM MAIL   Вверх
jonie
Дата 20.12.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



http://www.codeproject.com/KB/IP/winsockintro02.aspx
там готовый пример есть...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Олег2005
Дата 20.12.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



flintstone

M
Олег2005
Впредь используйте тег CODE для текста программ

PM MAIL WWW MSN   Вверх
flintstone
Дата 21.12.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 18.10.2007

Репутация: нет
Всего: нет



Спасибо.
Олег2005, буду следующий раз более внимательным.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.