Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt WinInet gebruiken om FTP-ondersteuning toe te voegen voor het downloaden en uploaden van bestanden vanuit uw toepassing. U kunt OnStatusCallback overschrijven en de dwContext-parameter gebruiken om voortgangsinformatie te verstrekken aan gebruikers tijdens het zoeken naar en downloaden van bestanden.
Dit artikel bevat de volgende onderwerpen:
In de onderstaande codefragmenten ziet u hoe u een eenvoudige browser maakt, een webpagina downloadt, ftp een bestand downloadt en zoekt naar een gopher-bestand. Ze zijn niet bedoeld als volledige voorbeelden en niet allemaal bevatten uitzonderingsafhandeling.
Zie Win32 Internet Extensions (WinInet) voor meer informatie over WinInet.
Een zeer eenvoudige browser maken
#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();
}
Een webpagina downloaden
//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 een bestand
#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();
}
Een Gopher-directory ophalen
#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 gebruiken
Wanneer u de WinInet-klassen gebruikt, kunt u het Lid OnStatusCallback van het CInternetSession-object van uw toepassing gebruiken om statusinformatie op te halen. Als u uw eigen CInternetSession object afleidt, overschrijft OnStatusCallbacken status callbacks inschakelt, roept MFC uw OnStatusCallback functie aan met voortgangsinformatie over alle activiteiten in die internetsessie.
Omdat één sessie verschillende verbindingen kan ondersteunen (die gedurende hun levensduur veel verschillende bewerkingen kunnen uitvoeren), OnStatusCallback moet er een mechanisme zijn om elke statuswijziging met een bepaalde verbinding of transactie te identificeren. Dit mechanisme wordt geleverd door de context-id-parameter die wordt gegeven aan veel van de lidfuncties in de WinInet-ondersteuningsklassen. Deze parameter is altijd van het type DWORD en heeft altijd de naam dwContext.
De context die aan een bepaald internetobject is toegewezen, wordt alleen gebruikt om de activiteit te identificeren die het object veroorzaakt in het OnStatusCallback lid van het CInternetSession object. De aanroep naar OnStatusCallback ontvangt verschillende parameters; deze parameters werken samen om uw toepassing te vertellen welke voortgang is geboekt voor welke transactie en verbinding.
Wanneer u een CInternetSession object maakt, kunt u een dwContext-parameter opgeven voor de constructor.
CInternetSession zelf maakt geen gebruik van de context-id; In plaats daarvan wordt de context-id doorgegeven aan alle door InternetConnection afgeleide objecten die niet expliciet een eigen context-id hebben. Op zijn beurt geven deze CInternetConnection objecten de context-id door aan CInternetFile objecten die ze maken als u niet expliciet een andere context-id opgeeft. Als u daarentegen een specifieke context-id van uw eigen object opgeeft, worden het object en alle werkzaamheden die het doet gekoppeld aan die context-id. U kunt de context-id's gebruiken om te bepalen welke statusinformatie aan u wordt gegeven in uw OnStatusCallback functie.
Voortgangsgegevens weergeven tijdens het overdragen van bestanden
Als u bijvoorbeeld een toepassing schrijft die een verbinding maakt met een FTP-server om een bestand te lezen en ook verbinding maakt met een HTTP-server om een webpagina op te halen, hebt u een CInternetSession object, twee CInternetConnection objecten (een zou een CFtpSession en de andere een CHttpSessionzijn), en twee CInternetFile objecten (één voor elke verbinding). Als u standaardwaarden voor de dwContext-parameters hebt gebruikt, kunt u geen onderscheid maken tussen de OnStatusCallback aanroepen die de voortgang voor de FTP-verbinding aangeven en de aanroepen die de voortgang voor de HTTP-verbinding aangeven. Als u een dwContext-id opgeeft, waarop u later kunt testen OnStatusCallback, weet u welke bewerking de callback heeft gegenereerd.
Zie ook
Basisprincipes van MFC Internet Programming
Win32 Internet Extensions (WinInet)