Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Плз, надо загрузить что-то вроде http://www.mail.ru/~vasily_pupkin/docs.zip ... реализация (примерно) ? или где найти инфу ??? спасибо ... purpe опубликован 06-03-2001 12:46 MSK у меня была подобная проблемма, тока надо было, чтобы программка скачивала с сервера РосБизнесКонсалтинг курс бакса. А этот курс хранится у них в текстовом файле.

Решил я енту проблему с помощью bsd-styled сокетов, но компилировал в Visual C++. Просто мне нужно было, чтобы экзешник получился маленьким :)

 
 char *RbcMessage[] =
 
 {
 
 "GET http://www.rbc.ru/out/801.csv HTTP/1.0\r\n",
 
 "Accept: */*\r\n",
 
 "Referer: http://www.rbc.ru\r\n",
 
 "Accept-Language: ru\r\n",
 
 "Accept-Encoding: gzip, deflate\r\n",
 
 "User-Agent: Informer from RBC\r\n",
 
 "Host: www.rbc.ru\r\n\r\n\r\n",
 
 NULL
 
 };
 
 
 
 SOCKADDR_IN remoteAddr;
 
 PHOSTENT phe;
 
 SOCKET SendSocket;
 
 CString m_Kurs;
 
 CString m_Line;
 
 
 
 int err;
 
 int iMsg = 0;
 
 int iLength;
 
 int iEnd = 0;
 
 int ndx;
 
 int bytesReceived = 0;
 
 char szLine[712]; //предполагаемая длина принимаемого файла
 
 iLength = 0;
 
 
 
 WSADATA WSAData;
 
 WSAStartup(MAKEWORD(1, 1), &WSAData);
 
 
 
 //создаём сокет
 
 struct sockaddr_in srv_address;
 
 int namelen;
 
 
 
 SendSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
 if(SendSocket != INVALID_SOCKET) {
 
 memset(&srv_address,0,sizeof(SOCKADDR_IN));
 
 srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
 
 srv_address.sin_family = AF_INET;
 
 srv_address.sin_port = 0;
 
 }
 
 if(bind(SendSocket, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
 
 closesocket(SendSocket);
 
 return FALSE;
 
 } else {
 
 namelen=sizeof(SOCKADDR_IN);
 
 getsockname(SendSocket,(SOCKADDR *)&srv_address,&namelen);
 
 return TRUE;
 
 }
 
 
 
 //соединяем сокет с сервером
 
 if((phe = gethostbyname("www.rbc.ru"))!=0){ remoteAddr.sin_family = AF_INET;
 
 remoteAddr.sin_port = htons(RBC_PORT);
 
 memcpy((char *)&(remoteAddr.sin_addr), phe->h_addr, phe->h_length);
 
 
 
 err = connect (SendSocket, (PSOCKADDR) & remoteAddr, sizeof (remoteAddr));
 
 if(err) {
 
 m_Kurs = "Невозможно соединиться с сервером";
 
 return FALSE;
 
 }
 
 else {
 
 do {
 
 send(SendSocket, (LPSTR)RbcMessage[iMsg], strlen(RbcMessage[iMsg]), 0);
 
 iMsg++;
 
 } while(RbcMessage[iMsg]);
 
 }
 
 
 
 do {
 
 iLength = recv(SendSocket, szLine, 712, 0);
 
 if(iLength) {
 
 // Здесь проводится разборка принимаемого файла
 
 m_Line = szLine;
 
 if((ndx = m_Line.Find("USD ЦБ РФ"))!=-1) {
 
 m_Line = m_Line.Left(ndx+23);
 
 m_Line = m_Line.Mid(ndx+10);
 
 m_Kurs = "Курс ЦБ РФ: ";
 
 m_Kurs += m_Line;
 
 }
 
 else m_Kurs = "Неудаётся получить файл с сервера";
 
 }
 
 if(iLength==0) break;
 
 bytesReceived += iLength;
 
 } while ( bytesReceived < 712 );
 
 }
 
 else {
 
 m_Kurs = "Неудаётся установить связь с сервером";
 
 return FALSE;
 
 }
 
 
Естевственно надо не забыть добавить в проект файл WSOCK32.LIB OlegO опубликован 06-03-2001 13:11 MSK Закачку файла не так сложно организовать используя MFC класы, или библиотеки WinInet. в первом случае посмотри CInternetSession, CHttpConnection, CHttpFile пример для наглядности:
 
 try
 
 {
 
 CString lpstrProxy=strProxyName+":"+strProxyPort;
 
 CInternetSession mysession(NULL,0,AccessType,lpstrProxy,NULL);
 
 
 
 CHttpFile *remotefile = (CHttpFile *)mysession.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY);
 
 if (remotefile==NULL)
 
 {
 
 AfxMessageBox("Can't find file on the server...", MB_OK|MB_ICONSTOP);
 
 }
 
 
 
 CFile myfile(SavePath, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
 
 
 
 int numbytes = 0;
 
 long HTTPBUFLEN = 1000L;
 
 
 
 TCHAR httpbuff[HTTPBUFLEN];
 
 
 
 while (numbytes = remotefile->Read(httpbuff, HTTPBUFLEN))
 
 {
 
 myfile.Write(httpbuff, numbytes);
 
 
 
 }
 
 myfile.Close ();
 
 remotefile->Close ();
 
 delete remotefile;
 
 }
 
 catch(CException* e)
 
 {
 
 e->Delete();
 
 }
 
 
 
 
... для второго метода ф-и дублируют классы, они находятся wininet.h wininet.lib, но используют больше возможностей настройки

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS