Udostępnij za pośrednictwem


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.

Zobacz też

Koncepcje

MFC — podstawy programowania Internetu

Rozszerzenia internetowe Win32 (WinInet)