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

Ваш аккаунт

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

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

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

Winsock в скачиваемом файле мусор

11
11 июня 2008 года
oxotnik333
2.9K / / 03.08.2007
Скачиваю *rar архив примером из FAQа, в результате файл содержит заголовок ответа сервера + в теле получается какой то мусор, и того исходный файл - 417 кб, а приходит 419 кб.
После ручного удаления заголовка ответа сервера из телв файла (в блокноте) файл все равно не открывается.
Собственно вопрос: как избавиться от мусора?
ЗЫ: пробовал размер буфера делать ==1 и равным длине файла - та же песня.
1
11 июня 2008 года
kot_
7.3K / / 20.01.2000
Цитата: oxotnik333
Скачиваю *rar архив примером из FAQа, в результате файл содержит заголовок ответа сервера + в теле получается какой то мусор, и того исходный файл - 417 кб, а приходит 419 кб.
После ручного удаления заголовка ответа сервера из телв файла (в блокноте) файл все равно не открывается.
Собственно вопрос: как избавиться от мусора?
ЗЫ: пробовал размер буфера делать ==1 и равным длине файла - та же песня.


приводите свой код. как показывает практика - когда вы говорите о "примере из ФАК" - то лучше посмотреть что вы туда написали.

11
11 июня 2008 года
oxotnik333
2.9K / / 03.08.2007
Код:
char request[]=
        "GET http://sources.codenet.ru/file/1628/ss-0.1.0.143.rar/ HTTP/1.0\r\n\
        Accept: application/octet-stream */*\r\n\
        Accept-Language: ru\r\n\
        User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)\r\n\
        Transfer-Encoding: chunked\r\n\
        Host: sources.codenet.ru\r\n\r\n";
        WSADATA wsadata;
        SOCKET m_socket;
        sockaddr_in adr;
        hostent* hn;
        char buff [4096];
        char head [1];
        if (WSAStartup (0x0101, &wsadata) != 0)return;
        if (INVALID_SOCKET == (m_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)))return;
        if (NULL == ( hn = gethostbyname ("myproxy")))return;
        adr.sin_family = AF_INET;
        adr.sin_addr.S_un.S_addr = *(DWORD*)hn->h_addr_list[0];
        adr.sin_port = htons(3128);
        if (SOCKET_ERROR == connect (m_socket, (sockaddr*)&adr, sizeof (adr)))return;
        if (SOCKET_ERROR == send (m_socket, request, strlen(request), 0))return;
        int len;
        FILE *stream;
        stream = fopen ("ss-0.1.0.1431.rar", "w");
        do
        {
                len = recv (m_socket, (char*)&buff, 4096, 0);
                fwrite((void*)buff, len, 1, stream);
                Form1->Memo1->Lines->Add((char*)buff);
         }while (len!=0);
        fclose(stream);
        if (SOCKET_ERROR == closesocket(m_socket))return;


ЗЫ: Transfer-Encoding: chunked ни на что не влияет
11
11 июня 2008 года
oxotnik333
2.9K / / 03.08.2007
проблема решена
stream = fopen ("ss-0.1.0.1431.rar", "wb");
ЗЫ: можно закрыть или удалить
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог