Aracılığıyla paylaş


WinInet Temelleri

WinInet'i kullanarak uygulamanızın içinden dosya indirmek ve karşıya yüklemek için FTP desteği ekleyebilirsiniz. OnStatusCallback'i geçersiz kılabilir ve dosyaları ararken ve indirirken kullanıcılara ilerleme bilgileri sağlamak için dwContext parametresini kullanabilirsiniz.

Bu makale aşağıdaki konuları içerir:

Aşağıdaki kod alıntılarında basit bir tarayıcı oluşturma, Web sayfası indirme, FTP dosyası indirme ve gopher dosyası arama işlemleri gösterilmektedir. Bunlar tam örnek olarak tasarlanmamıştır ve tümü özel durum işleme içermez.

WinInet hakkında ek bilgi için bkz . Win32 internet uzantıları (WinInet).

Çok Basit Bir Tarayıcı Oluşturma

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

Web Sayfası İndirme

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

Gopher Dizini Alma

#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 kullanma

WinInet sınıflarını kullanırken, durum bilgilerini almak için uygulamanızın CInternetSession nesnesinin OnStatusCallback üyesini kullanabilirsiniz. Kendi CInternetSession nesnenizi türetir, geçersiz kılar OnStatusCallbackve durum geri çağırmalarını etkinleştirirseniz, MFC işlevinizi OnStatusCallback bu İnternet oturumundaki tüm etkinliklerle ilgili ilerleme bilgileriyle çağırır.

Tek bir oturum birkaç bağlantıyı destekleyebileceğinden (yaşam süresi boyunca birçok farklı işlem gerçekleştirebilir), OnStatusCallback belirli bir bağlantı veya işlemle her durum değişikliğini tanımlamak için bir mekanizma gerekir. Bu mekanizma, WinInet destek sınıflarındaki üye işlevlerin çoğuna verilen bağlam kimliği parametresi tarafından sağlanır. Bu parametre her zaman DWORD türündedir ve her zaman dwContext olarak adlandırılır.

Belirli bir İnternet nesnesine atanan bağlam yalnızca nesnenin üyesinde OnStatusCallback CInternetSession neden olduğu etkinliği tanımlamak için kullanılır. çağrısı OnStatusCallback birkaç parametre alır; bu parametreler birlikte çalışarak uygulamanıza hangi işlem ve bağlantı için ilerleme kaydedildiğini bildirir.

Bir CInternetSession nesne oluşturduğunuzda, oluşturucuya bir dwContext parametresi belirtebilirsiniz. CInternetSessionkendisi bağlam kimliğini kullanmaz; bunun yerine, bağlam kimliğini açıkça kendi bağlam kimliğini almayan İnternet Bağlan ion türetilmiş nesnelere geçirir. Buna karşılık, farklı bir bağlam kimliği açıkça belirtmezseniz, bu CInternetConnection nesneler bağlam kimliğini oluşturdukları nesnelere CInternetFile geçirir. Öte yandan, kendi bağlam kimliğinizi belirtirseniz, nesne ve yaptığı tüm çalışmalar bu bağlam kimliğiyle ilişkilendirilecektir. İşlevinizde OnStatusCallback size hangi durum bilgilerinin verildiğini belirlemek için bağlam kimliklerini kullanabilirsiniz.

Dosyaları Aktarırken İlerleme Bilgilerini Görüntüleme

Örneğin, bir dosyayı okumak için FTP sunucusuyla bağlantı oluşturan ve bir Web sayfası almak için bir HTTP sunucusuna bağlanan bir uygulama yazarsanız, bir CInternetSession nesneniz, iki CInternetConnection nesneniz (biri a CFtpSession , diğeri bir CHttpSession) ve iki CInternetFile nesneniz (her bağlantı için bir tane) olur. dwContext parametreleri için varsayılan değerleri kullandıysanız, FTP bağlantısı için ilerleme durumunu OnStatusCallback gösteren çağrılar ile HTTP bağlantısı için ilerleme durumunu gösteren çağrılar arasında ayrım yapamayacaksınız. daha sonra içinde OnStatusCallbacktest yapabileceğiniz bir dwContext kimliği belirtirseniz, geri çağırmayı hangi işlemin oluşturacağını bilirsiniz.

Ayrıca bkz.

MFC Internet Programlama Temelleri
Win32 Internet Uzantıları (WinInet)