Класове за работа в Internet от високо ниво WinInet
| Информационни технологии | 2009-12-04 | 48 сваляния |
49 Класове за работа в Internet от високо ниво WinInet. Основни предимства. Базови класове: CInternetConnection; CHttpConnection; CInternetFile и др. Нотификации на прогреса на Internet сесия.
WinInet
Това е APIот по-високо ниво, но работи само за HTTP,FTP, Gopher клиенти, не и за сървъри.
Кодът е в WININET.DLL.
предимства на WinInet:
-
кеширане
-
чете записаният в registry proxy сървър и прави достъпа през него.
-
буфрира се вход/изхода
-
удобен API
-
изгражда автоматично headers, незабелязано пренасочва повикванията.
В 16 битова среди няма многонишково програмиране, затова в асинхронен режим в програмата ще има много изчакване.
В 32 битова среди имаме многонишково програмиране. Комуникациите могат да се оформят в отделни нишки, а интерфейса в главна нишка. Това позволява нишките при блокиране да се предаде управлението на друга нишка без да увисва интерфейса. Предимно се работи с WinInet.
Обвивка в MFC класове
CInternetSession Отнася се за всички видове протоколи.
CStdioFile *OpenURL(pstrURL, незад. параметри);
CHttpConnection
Създаването на този обект става след конструиране на CInternetSession с member ф-цията му GetHttpConnection(), връщаща connection handle (HINTERNET).
CFtpConnection, CGopherConnection
CInternetFile
CHTTPFile* httpfile = (CHTTPFile*) internetSession.OpenURL(strurl);
CHttpFile
Създава се с CHttpConnection::OpenFile();
CFtpFileFind, CGopherFileFind
CInternetException
Нотификации за прогреса на Internet сесия
За да се работи с тях се конструира наследник, напр:
western" style= "font-style: italic; margin-bottom: 0in; text-align: justify">{
..public: CCallBacknternetSession(){EnableStatusCallback(..)
}
protected: OnStatusCallback(..)};
като:
-
В конструктора се вика CInternetSession::EnableStatusCallback(), която разрешава обратните повиквания.
-
Предефинира се member ф-ията OnStatusCallback( dwInternalStatus,)
50 Задачи на примерна клиентска програма, осъществяваща заявка към Internet сървър.
Ето код на примерна клиентска програма, осъществяваща заявка Get към Internet сървър. Кодът се поставя в отделна нишка. За да стане това името на нишковата проц. да се постави в:
AfxBeginThread(ClientWinInetThreadProc,.);
на главната нишка на приложението.
CString g_strServerName = Localhost;
UINT ClientWinInetThreadProc( LPVOID pParam){
CInternetSession session;
CHttpConnection* pConnection = NULL;
CHttpFile* pFile1=NULL;char* buffer=new char[MAXBUFF];
UINT nBytesRead=0;
try { pConnection = session.GetHttpConnection( g_strServerName, 80);
pFile1 = pConnection OpenRequest( 1, /); //сляпо GET
pFile1SendRequest();
nBytesRead = pFile1Read(buffer, MAXBUF 1);
buffer[nBytesRead] = ;
char temp[10];
if(pFile1Read(temp, 10) != 0) //повторен опит за четене
AfxMessageBox(Файлът надхвърля размера файлът не е кеширан);
}
AfxMessageBox(buffer);
}
catch( CInternetException* e){// обработка на изключението
edelete;}.
Тагове от реферата: WININET, Internet, високо, основни











