Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
С помощью WinInet можно добавить поддержку FTP для скачивания и отправки файлов из приложения. Вы можете переопределить OnStatusCallback и использовать параметр dwContext для предоставления сведений о ходе выполнения пользователям при поиске и скачивании файлов.
В этой статье содержатся следующие разделы:
В приведенном ниже фрагменте кода показано, как создать простой браузер, скачать веб-страницу, 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 объект, два CInternetConnection объекта (один CFtpSession будет одним из них, а другой — CHttpSessionи двумя CInternetFile объектами (по одному для каждого подключения). Если вы использовали значения по умолчанию для параметров dwContext , вы не сможете различать OnStatusCallback вызовы, указывающие ход выполнения подключения FTP и вызовы, указывающие ход выполнения подключения HTTP. Если вы укажете идентификатор dwContext, который можно позже проверить в OnStatusCallback, вы узнаете, какая операция сгенерировала обратный вызов.
См. также
Основы интернет-программирования MFC
Расширения Интернета Win32 (WinInet)