Не могу разобраться в чем проблема? -посылаю запрос серверу: Code: char url[] = "/pic.aspx?rand=143"; char host[] = "sms.mts.ru"; sprintf( request, "GET %s HTTP/1.1\r\nAccept: image/png, image/gif\r\nHost: %s\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\nAccept: image/gif\r\n\r\n", url, host ); -получаю ответ сервера Code: HTTP/1.1 200 OK Date: Thu, 28 Feb 2008 17:40:57 GMT Server: Microsoft-IIS/6.0 Compression-Control: whitespace X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Pragma: no-cache Set-Cookie: ASP.NET_SessionId=f3gyvfetrwl3xvua3wl5rzff; path=/; HttpOnly Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: image/gif Content-Length: 3726 GIF89aМ320 Вот картинка содержит 3726 байт -далее пытаюсь ее получить Code: unsigned int x; while((len=recv( s, buf, 32*10, 0))>0){ fout.open("C:/1.gif",ios::binary | ios::app); fout.write(buf,len); x+=len; fout.close(); } cout<<x<<endl; в переменной х должно содержатся 3726 (Content-Length: 3726) байт. Но у меня получается где-то 2000+-. ???ПОЧЕМУ???
прикольно 8)))..... какойто ответ сервера 8)) а потом видимо там же получают код картинки в MIME? и чего прямо mime64 на диск "валят"???? код в студию блин.... нифика не понятно! Во блин мучаются то не по децки..... настоящие пацаны Wininet используют 8))) .... хакиры чистый socket ,чтоб поразмяться с mime и кровушки отдать с gzip
// создаём переменную session и открываем сессию ANDY CInternetSession session( _T( "Delimiter" ), PRE_CONFIG_INTERNET_ACCESS ); // создаём переменную pServer класса CHttpConnection CHttpConnection* pServer = NULL; // создаём переменную pFile класса CHttpFile CHttpFile* pFile = NULL; //Обратите внимание, что все запросы к функциям членам WinInet классов включены в блок программы TRY. //Это сделано так, потому что при соединении с каким либо URL есть риск неправильной ссылки, //особенно, когда Вы полагаете, что пользователь сам печатает URL. //Другая проблема - времена ожидания, которые возникают, когда требуемый URL в настоящее время //неспособен обслужить подключение. //Так же обработка WinInet исключений, которые представлены в классе //CInternetException, является важной частью создания Internet приложения под MFC. try { // функция AfxParseURL получает данные с указанного URL ( у нас m_url ) об сервере, // объекте, типе сервиса и порте if ( AfxParseURL( m_url, dwServiceType, strServerName, strObject, nPort ) == 0 ) { // Устанавливаем подключение по HTTP протоклолу. pServer = session.GetHttpConnection( strServerName, nPort ); // посылаем запрос об объекте ( strObject ) pFile = pServer->OpenRequest( CHttpConnection::HTTP_VERB_GET, strObject, NULL, 1, NULL, NULL, INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_DONT_CACHE ); // Добавляем заголовок к HTTP запросу pFile->AddRequestHeaders( _T( "Accept: */*\r\nUser-Agent: Delimiter\r\n" ) ); // посылаем запрос pFile->SendRequest( ); DWORD dwRet; // переменная для хранения кода состояния pFile->QueryInfoStatusCode( dwRet ); // записываем код состояния в dwRet // вывод данных CString strHeader; // переменная для хранения полученного заголовока запроса pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strHeader); // записываем заголовок в strHeader // вывод данных // m_mes += "Header = "; // m_mes += strHeader; // если код состояния не равен 200, то выходим из функции if( dwRet != 200 ) { delete[] mytempbuf; session.Close( ); return 0; } // ---------------------------------------------------------- // проверка выбора файла для записи fptr=fopen(my_path,"wb"); int allRead = 0; // переменная для хранения общего числи считанных байт int nRead = pFile->Read( mytempbuf, 1024 ); // считываем первые 1024 байта в буфер. // переменная nRead хранит количество // считанных байт allRead += nRead; // обновляем общее число считанных байт // вывод данных // записываем буфер из nRead байт в файл fwrite(mytempbuf,1,nRead,fptr); // цикл считывания, пока nRead не будет равняться нулю while ( nRead > 0 ) { nRead = pFile->Read( mytempbuf, 1024 ); if( nRead != 0 ) { fwrite(mytempbuf,1,nRead,fptr); allRead += nRead; } } fclose(fptr); } catch ( CInternetException* pEx ) { // Если произошла ошибка в WinInet // вывод ошибки char szErr[1024]; pEx->GetErrorMessage( szErr, 1024 ); pEx->Delete( ); // удаление переменной класса CInternetException if ( pFile != NULL ) delete pFile; // закрываем Internet файл if ( pServer != NULL ) delete pServer; // закрываем сервер delete[] mytempbuf; Sleep(50); return 0; } if ( pFile != NULL ) delete pFile; // закрываем Internet файл if ( pServer != NULL ) delete pServer; // закрываем сервер session.Close( ); // закрываем сессию delete[] mytempbuf;
Действительно получая ответ с севера, получаю часть Gif'а. Не удавалось записать в файл т.к. использовал оператор << который предназначен для форматированного текста. Спасибо всем кто помог...