Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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();
}
Bir Dosya'yı FTP ile Gönder
#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 OnStatusCallbackCInternetSession 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 InternetConnection türetilmiş nesnelerine 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.
içinde test yapabileceğiniz bir OnStatusCallback kimliği belirtirseniz, geri çağırmayı hangi işlemin oluşturduğunu bilirsiniz.
Ayrıca bakınız
MFC internet programlama temelleri
Win32 İnternet Uzantıları (WinInet)