Podstawy WinInet
WinInet umożliwia dodawanie obsługi FTP do pobierania i wysyłania plików z poziomu aplikacji.Można zastąpić OnStatusCallback i używać dwContext parametr udostępnianie użytkownikom informacji o postępie, jak wyszukiwanie i pobieranie plików.
W tym artykule omówiono następujące tematy:
Tworzenie bardzo prosty przeglądarki
Pobieranie strony sieci Web
FTP, plik
Pobierz katalog Gopher
Wyświetlanie informacji o postępie podczas transferu plików
Fragmenty kodu poniżej przedstawiają sposób utworzyć prosty przeglądarki, pobieranie strony sieci Web, pliku, FTP i wyszukać plik gopher.Nie są one przeznaczone jako kompletne przykłady i nie posiadają obsługi wyjątków.
Aby uzyskać dodatkowe informacje na temat usługi WinInet, zobacz Win32 Internet Extensions (WinInet).
Tworzenie bardzo prosty przeglądarki
#include <afxinet.h>
void DisplayPage(LPCTSTR pszURL)
{
CInternetSession session(_T("My Session"));
CStdioFile* pFile = NULL;
CHAR szBuff[1024];
//use a URL and print a Web page to the console
pFile = session.OpenURL(pszURL);
while (pFile->Read(szBuff, 1024) > 0)
{
printf_s("%1023s", szBuff);
}
delete pFile;
session.Close();
}
Pobieranie strony sieci Web
//this code excerpt also demonstrates try/catch exception handling
#include <afxinet.h>
void DisplayHttpPage(LPCTSTR pszServerName, LPCTSTR pszFileName)
{
CInternetSession session(_T("My Session"));
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
CString strServerName;
INTERNET_PORT nPort = 80;
DWORD dwRet = 0;
pServer = session.GetHttpConnection(pszServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, pszFileName);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK)
{
CHAR szBuff[1024];
while (pFile->Read(szBuff, 1024) > 0)
{
printf_s("%1023s", szBuff);
}
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//catch errors from WinInet
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
_tprintf_s(_T("%63s"), pszError);
}
session.Close();
}
FTP, plik
#include <afxinet.h>
void GetFtpFile(LPCTSTR pszServerName, LPCTSTR pszRemoteFile, LPCTSTR pszLocalFile)
{
CInternetSession session(_T("My FTP Session"));
CFtpConnection* pConn = NULL;
pConn = session.GetFtpConnection(pszServerName);
//get the file
if (!pConn->GetFile(pszRemoteFile, pszLocalFile))
{
//display an error
}
delete pConn;
session.Close();
}
Pobierz katalog Gopher
#include <afxinet.h>
void RetrieveGopherFile(LPCTSTR pszGopherSite, LPCTSTR pszFile)
{
CInternetSession session(_T("My Gopher Session"));
CGopherConnection* pConn = NULL;
CGopherFileFind* pFile;
pConn = session.GetGopherConnection(pszGopherSite);
pFile = new CGopherFileFind(pConn);
BOOL bFound = pFile->FindFile(pszFile);
while (bFound)
{
//retrieve attributes of found file
bFound = pFile->FindNextFile();
}
delete pFile;
delete pConn;
session.Close();
}
Użyj OnStatusCallback
Korzystając z klasy WinInet, można użyć OnStatusCallback Członkowskich aplikacji CInternetSession obiekt, aby pobrać informacje o stanie.Jeśli płetwy własne CInternetSession obiektów, zastąpić OnStatusCallbacki włączyć stan wywołania zwrotne, MFC będzie wywoływać z OnStatusCallback funkcja postępu informacje o wszystkich działań w ramach tej sesji internetowe.
Ponieważ jedna sesja może obsługiwać kilka połączeń (które nad ich życia, może wykonywać wiele różnych operacji odrębne), OnStatusCallback potrzebuje mechanizm identyfikację każdej zmiany stanu z określonego połączenia lub transakcji.Ten mechanizm jest dostarczana przez parametru Identyfikatora kontekstu podane dla wielu funkcji elementów członkowskich w klasach obsługi usługi WinInet.Ten parametr jest zawsze typu DWORD i zawsze o nazwie dwContext.
Używany jest kontekst przypisane do określonego obiektu internetowego tylko do identyfikowania działania obiektu powoduje, że w OnStatusCallback członek CInternetSession obiektu.Wywołanie OnStatusCallback otrzymuje kilka parametrów; Parametry te działają razem aplikacji stwierdzić, jaki poczyniono na którym transakcji i połączenia.
Podczas tworzenia CInternetSession obiektu, można określić dwContext parametr do konstruktora.CInternetSessionsam nie używa Identyfikatora kontekstu; Zamiast tego przechodzi na dowolny identyfikator kontekstu wyposażone-pochodzących z obiektów, które wyraźnie nie uzyskać identyfikator kontekstu we własnym zakresie.Z kolei, te CInternetConnection obiekty przejdzie identyfikator kontekstu wzdłuż do CInternetFile obiektów tworzą, jeśli nie zostaje bezpoorednio okreolona identyfikatora inny kontekstJeśli, z drugiej strony, określ identyfikator kontekstu określonego własne, obiekt i żadnej pracy będzie skojarzony z tym identyfikatorem kontekstu.Kontekst identyfikatory służy do określenia, jakie informacje o stanie jest podane do Ciebie w sieci OnStatusCallback funkcji.
Wyświetlanie informacji o postępie podczas transferu plików
Na przykład, jeśli piszesz aplikacja tworzy połączenie z serwerem FTP do czytania pliku i także łączy się z serwerem HTTP, aby uzyskać stronę sieci Web, musisz CInternetSession obiektu, dwa CInternetConnection obiektów (jeden będzie CFtpSession i innych będzie CHttpSession) oraz dwóch CInternetFile obiekty (po jednym dla każdego połączenia).Jeśli użyto wartości domyślnych dla dwContext parametrów, nie będzie można odróżnić OnStatusCallback wywołania, które wskazują postępu dla połączenia FTP i wywołania, które wskazują postępu dla połączenia HTTP.Jeśli określisz dwContext Identyfikatora, który można później sprawdzić w OnStatusCallback, będzie wiadomo, która operacja generowane wywołanie zwrotne.