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 OnStatusCallback
ve 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. CInternetSession
kendisi 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 OnStatusCallback
test 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)