Поделиться через


Основные сведения о WinInet

Можно использовать WinInet добавление поддержки FTP, чтобы загрузить и передавать файлы из приложения. Можно переопределить OnStatusCallback и используйте параметр dwContext для реализации информацию о ходе выполнения пользователи как для поиска и загрузите файлы.

Этот раздел содержит следующие подразделы:

  • Создайте очень простой браузер

  • Загрузите страницу

  • Файл FTP

  • Извлечение каталог gopher

  • Отображает сведения о ходе выполнения во время перемещающ файлы

Извлечь кода демонстрируют, как создать простой браузер, загрузят страницы, FTP файл и поиск файла gopher. Они не предназначены для как полные примеры и не содержат все обработку исключений.

Дополнительные сведения о WinInet см. в разделе Расширения Win32 Интернета (WinInet).

Создайте очень простой браузер

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

Загрузите страницу

//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

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

Извлечение каталог 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();
}

Используйте OnStatusCallback

При использовании классов WinInet, можно использовать элемент OnStatusCallback объекта CInternetSession приложения извлечь сведения о состоянии. Если производный объект CInternetSession, переопределите OnStatusCallback и включить обратные вызовы состояния, MFC вызывает пользовательскую функцию OnStatusCallback со сведениями о ходе выполнения о работе полностью в этом сеансе Интернета.

Поскольку один сеанс может поддерживать несколько подключений (, по своим времени существования, можно выполнять различные определенных операций), OnStatusCallback требуется механизм определения каждое изменение состояния с указанными подключение или транзакцией. Механизм, предоставляется параметром контекстного идентификатора, присвоенное многие функции-члены в классах поддержки WinInet. Этот параметр всегда типа DWORD и всегда имеет имя dwContext.

Контекст, в частности объект Интернета используется только для определения причины работы объекта в элементе OnStatusCallback объекта CInternetSession. Вызов OnStatusCallback получит несколько параметров; эти параметры работают вместе, чтобы сообщить приложению о ходе выполнения, выполненной для которого транзакции и подключение.

При создании объекта CInternetSession можно указать параметр dwContext в конструктор. CInternetSession сам не использует контекстный идентификатор; вместо этого он передает контекстный идентификатор и перейти к любому InternetConnection- производным объектам, которые явно не задает контекстный идентификатор их. В свою очередь, эти объекты CInternetConnection загружают контекстный идентификатор вперед к объектам CInternetFile они создают, если явно не указан идентификатор другого контекста Если, с другой стороны, нужно задать конкретный контекстный идентификатор, объект, и любой рабочий она позволяет связать с этим идентификатором контекста Можно использовать идентификатор контекста указать сведения о состоянии указан в функции OnStatusCallback.

Отображает сведения о ходе выполнения во время перемещающ файлы

Например, если нужно создать приложение, которое создает соединение с FTP-сервером для считывания файла, а также подключиться к HTTP-серверу для доступа к странице будет создан объект CInternetSession, 2 объекта CInternetConnection (один будет CFtpSession и другой будет CHttpSession) и 2 объекта CInternetFile (по одному для каждого соединения). При использовании значения по умолчанию для параметров dwContext, то, возможно, будет различать вызовами OnStatusCallback, отражающих прогресс для подключения FTP и вызовы, отражающих прогресс для подключения HTTP. Если указан идентификатор dwContext, которое можно более новый тест в OnStatusCallback необходимо узнать, какая операция генерировала обратный вызов.

См. также

Основные понятия

Основы программирования для интернет-решений MFC

Расширения Интернета Win32 (WinInet)