Sdílet prostřednictvím


Základy WinInet

Můžete přidat podporu FTP stáhnout a uložit soubory z vaší aplikace WinInet.Můžete přepsat OnStatusCallback a dwContext parametr poskytnout informace o průběhu uživatelům vyhledávat a stahovat soubory.

Tento článek obsahuje následující témata:

  • Vytvořit velmi jednoduchý prohlížeč

  • Stahování webové stránky

  • Soubor FTP

  • Načíst adresář protokolu Gopher

  • Zobrazení informací o pokroku při přenosu souborů

Citáty kód níže ukazují, jak vytvořit jednoduchý prohlížeč, stahování webové stránky, souboru, FTP a gopher soubor.Nejsou určeny jako kompletní příklady a všechny obsahují zpracování výjimek.

Další informace o rozhraní WinInet viz Rozšíření Win32 Internet (WinInet).

Vytvořit velmi jednoduchý prohlížeč

#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();
}

Stahování webové stránky

//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();
}

Soubor FTP

#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();
}

Načíst adresář protokolu 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();
}

Použít OnStatusCallback

Při použití rozhraní WinInet tříd, můžete OnStatusCallback člen vaší aplikace CInternetSession načíst informace o stavu objektu.Pokud jste odvození vlastního CInternetSession objekt, přepsat OnStatusCallbacka Povolit zpětná stav MFC bude volat vaše OnStatusCallback funkce s informací o veškeré činnosti v dané relaci Internet.

Protože relace mohou podporovat více připojení (a které nad jejich životnost může provádět mnoho různých operací odlišné) OnStatusCallback potřebuje mechanismus k identifikaci každé změně stavu s konkrétní připojení nebo transakce.Tento mechanismus zajišťuje parametr ID kontextu mnohé členské funkce tříd podpora rozhraní WinInet k.Tento parametr je vždy typu DWORD a vždy s názvem dwContext.

Kontextu přiřazené k určitému objektu Internet slouží pouze k identifikovat aktivitu způsobuje objekt OnStatusCallback člen CInternetSession objektu.Volání OnStatusCallback přijímá několik parametrů; Tyto parametry společně aplikace zjistit, jaký pokrok byl pro připojení a transakce.

Při vytváření CInternetSession objektu, můžete zadat dwContext parametr konstruktoru.CInternetSessionsamotné nepoužívá ID kontextu; místo toho předá ID kontextu k žádné InternetConnection-odvozené objekty, které nejsou explicitně získat ID kontextu vlastní.V zapnout, ty CInternetConnection objekty budou předávat ID kontextu spolu s CInternetFile objekty vytvářejí, pokud není explicitně zadat jiný kontext ID.Pokud na druhé straně zadáte ID kontextu konkrétní vlastní, objekt a všechny práce je spojena s tímto ID kontextu.ID kontextu lze určit, jaké informace o stavu je podáno ve vaší OnStatusCallback funkce.

Zobrazení informací o pokroku při přenosu souborů

Například pokud píšete aplikaci, která vytvoří připojení k serveru FTP pro čtení souboru a také připojení k serveru HTTP získáte na webové stránce, budete mít CInternetSession objektu, dva CInternetConnection objekty (jeden by CFtpSession a ostatní by CHttpSession) a dva CInternetFile objekty (jeden pro každé připojení).Pokud jsou použity výchozí hodnoty dwContext parametry by není možné rozlišovat mezi OnStatusCallback vyvolání označující průběh připojení FTP a vyvolání, označující průběh připojení HTTP.Pokud zadáte dwContext ID, které lze později otestovat v OnStatusCallback, budete vědět, které operace vytvořila zpětné.

Viz také

Koncepty

Základy programování Internet MFC

Rozšíření Win32 Internet (WinInet)