Share via


Nozioni fondamentali su ATL

È possibile utilizzare WinInet per aggiungere il supporto di FTP per scaricare e caricare i file dall'interno dell'applicazione.È possibile eseguire l'override di OnStatusCallback e utilizzare il parametro di dwContext per fornire informazioni sullo stato di avanzamento per gli utenti anche trovato e scaricare i file.

In questo articolo sono i seguenti argomenti:

  • Creare un browser molto semplice

  • Scaricare una pagina Web

  • FTP un file

  • Recuperare una directory di gopher

  • Visualizzare informazioni sullo stato di avanzamento mentre contengono i file

Gli estratti di codice riportato di seguito viene illustrato come creare un browser semplice, scaricare una pagina Web, un server FTP un file e una ricerca di un file di gopher.Permetterne come gli esempi completi e non contengono tutti la gestione delle eccezioni.

Per ulteriori informazioni su WinInet, vedere Estensioni internet Win32 (WinInet).

Creare un browser molto semplice

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

Scaricare una pagina 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 un file

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

Recuperare una directory di 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();
}

Utilizzare OnStatusCallback

Quando si utilizza WinInet classi, è possibile utilizzare il membro di OnStatusCallback dell'oggetto di CInternetSession dell'applicazione per recuperare le informazioni sullo stato.Se si deriva il proprio oggetto di CInternetSession , eseguire l'override di OnStatusCallbacke si abilita i callback dello stato, MFC chiamerà la funzione di OnStatusCallback con informazioni sullo stato di avanzamento su qualsiasi attività in tale sessione Internet.

Poiché una singola sessione può supportare più connessioni (che, sulla loro durata, potrebbero eseguire molte operazioni distinte diversi), OnStatusCallback richiede un meccanismo di identificare ogni modifica dello stato con una connessione o una transazione particolare.Tale meccanismo è specificato dal parametro dell'ID del contesto specificato a molte delle funzioni membro delle classi di supporto WinInet.Questo parametro è sempre di tipo DWORD ed è denominato sempre dwContext.

Il contesto assegnato a un oggetto particolare internet viene utilizzato per identificare solo l'attività le cause dell'oggetto nel membro di OnStatusCallback dell'oggetto di CInternetSession .La chiamata a OnStatusCallback riceve diversi parametri; questi parametri interagiscono per indicare all'applicazione che lo sono stati eseguiti per cui transazione e di connessione.

Quando si crea un oggetto di CInternetSession , è possibile specificare un parametro di dwContext al costruttore.CInternetSession stesso non utilizza l'ID del contesto, invece, viene passato l'ID del contesto rispetto a qualsiasi InternetConnectiondi oggetti derivati che non esplicitamente ottengono un ID di contesto propri.A sua volta, tali oggetti di CInternetConnection passeranno l'ID del contesto avanti agli oggetti di CInternetFile creano se in modo esplicito non si specifica un ID diverso di contestoSe, invece, si specifica un ID di contesto specifico personalizzati, l'oggetto e tutto il lavoro svolto essere associato all'identificazione di contestoÈ possibile utilizzare il contesto ID per identificare le informazioni sullo stato vengono fornire è nella funzione di OnStatusCallback .

Visualizzare informazioni sullo stato di avanzamento mentre contengono i file

Ad esempio, si scrive un'applicazione che crea una connessione a un server FTP per leggere un file e si connette a un server HTTP per ottenere una pagina Web, si otterrà un oggetto di CInternetSession , due oggetti di CInternetConnection (uno sarebbe CFtpSession e l'altro sarebbe CHttpSession) e due oggetti di CInternetFile (uno per ogni connessione).Se sono stati utilizzati i valori predefiniti per i parametri di dwContext , non sarà possibile distinguere tra le chiamate di OnStatusCallback che indicano lo stato di avanzamento per la connessione a FTP e le chiamate che indicano lo stato di avanzamento per la connessione HTTP.Se si specifica dwContext ID, che sarà possibile in seguito per verificare in OnStatusCallback, conoscerete quale operazione ha generato il callback.

Vedere anche

Concetti

Nozioni fondamentali della programmazione per Internet MFC

Estensioni Internet Win32 (WinInet)