クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
Visual C++
リファレンス
ライブラリ リファレンス
MFC
概念
 WinInet の基礎

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
MFC ライブラリ リファレンス
WinInet の基礎

WinInet を使用すると、アプリケーション内からファイルをダウンロードまたはアップロードするための FTP サポートを追加できます。ファイルの検索およびダウンロードの進行状況をユーザーに提供するには、OnStatusCallback をオーバーライドして、dwContext パラメータを使用します。

ここでは、以下の項目について説明します。

以下の各コードは、単純なブラウザの作成例、Web ページのダウンロード例、FTP によるファイルの操作例、および Gopher ファイルの検索例です。これらのコードは、プログラムの一部を抜粋したものであり、例外処理が含まれていないものもあります。

WinInet の詳細については、「Win32 インターネット拡張機能 (WinInet)」を参照してください。

単純なブラウザの作成

#include <afxinet.h>
//assumes URL names have been initialized
CInternetSession session("My Session");
CStdioFile* pFile = NULL;
//use a URL and display a Web page
while (lpszURL = DisplayPage(...))
{
   pFile = session.OpenURL(lpszURL);
   while (pFile->Read(szBuff,1024) > 0)
   {
      //read file...
   }
   delete pFile;
}
session.Close();

Web ページのダウンロード

//this code excerpt also demonstrates try/catch exception handling
#include <afxinet.h>
//assumes server, port, and URL names have been initialized
CInternetSession session("My Session");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
   CString strServerName;
   INTERNET_PORT nPort;

   pServer = session.GetHttpConnection(strServerName, nPort);
   pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
   pFile->AddRequestHeaders(szHeaders);
   pFile->SendRequest();
   pFile->QueryInfoStatusCode(dwRet);

   if (dwRet == HTTP_STATUS_OK)
   {
       UINT nRead = pFile->Read(szBuff, 1023);
       while (nRead > 0)
       {
           //read file...
       }
   }
   delete pFile;
   delete pServer;
}
catch (CInternetException* pEx)
{
   //catch errors from WinInet
}
session.Close();

FTP によるファイル操作

#include <afxinet.h>
//assumes server and file names have been initialized
CInternetSession session("My FTP Session");
CFtpConnection* pConn = NULL;

pConn = session.GetFtpConnection(lpszServerName);
//get the file
if (!pConn->GetFile(pstrRemoteFile, pstrLocalFile))
   //display an error
delete pConn;
session.Close();

Gopher フォルダの検索

#include <afxinet.h>
//assumes file name has been initialized
CInternetSession session("My Gopher Session");
CGopherConnection* pConn = NULL;
CGopherFileFind* pFile;

pConn = session.GetGopherConnection("gopher.yoursite.com");
pFile = new CGopherFileFind(pConn);
BOOL bFound = pFile->FindFile(lpszFileToFind);
while (bFound)
{
   bFound = pFile->FindNextFile();
   //retrieve attributes of found file
}
delete pFile;
delete pConn;
session.Close();

OnStatusCallback の使用

WinInet クラスを使用する場合は、アプリケーションの CInternetSession オブジェクトのメンバ関数 OnStatusCallback を使用して、ステータス情報を取得できます。独自の CInternetSession オブジェクトを派生し、OnStatusCallback をオーバーライドしてステータス コールバックを有効にすると、MFC は、OnStatusCallback 関数を呼び出して、該当するインターネット セッションのすべての利用状況を示します。

単一のセッションが複数の接続をサポートし、接続ごとに複数の独立した操作が行われる場合があります。したがって、OnStatusCallback は、接続またはトランザクションごとにステータスの変更を識別する機構を必要とします。この機構を提供するのは、WinInet サポート クラスの多くのメンバ関数に渡されるコンテキスト ID パラメータです。このパラメータは、常に DWORD 型であり、常に dwContext という名前で使用します。

特定のインターネット オブジェクトに割り当てられたコンテキストは、CInternetSession オブジェクトのメンバ関数 OnStatusCallback でそのオブジェクトの利用状況だけを識別します。OnStatusCallback の呼び出しには、複数のパラメータが渡されます。パラメータが相互に組み合わされて、トランザクションまたは接続ごとの進行状況がアプリケーションに知らされます。

CInternetSession オブジェクトを作成する場合は、コンストラクタで dwContext パラメータを設定します。CInternetSession は、それ自体はコンテキスト ID を使用しませんが、独自のコンテキスト ID を明示的に取得しない InternetConnection の派生オブジェクトに、コンテキスト ID を渡します。別のコンテキスト ID を明示的に指定しない限り、CInternetConnection オブジェクトに渡されたコンテキスト ID は、CInternetConnection オブジェクトが作成する CInternetFile オブジェクトに渡されます。一方、別のコンテキスト ID を独自に指定した場合、CInternetConnection オブジェクトとそれが行う作業は、指定したコンテキスト ID と関連付けられます。OnStatusCallback 関数で提供されるステータス情報は、そのコンテキスト ID で識別できます。

ファイル転送の進行状況の表示

FTP サーバーと接続してファイルを読み取り、HTTP サーバーと接続して Web ページを取得するアプリケーションを作成する場合は、1 つの CInternetSession オブジェクト、2 つの CInternetConnection オブジェクト (CFtpSessionCHttpSession)、および 2 つの CInternetFile オブジェクト (接続ごとに 1 つ) を使用します。dwContextパラメータに既定値を使用すると、OnStatusCallback が提供するステータス状況が、FTP 接続の進行状況であるか、HTTP 接続の進行状況であるかを区別できません。dwContext ID を指定すると、この後で OnStatusCallback で識別できるため、コールバックを生成した操作を特定できます。

参照

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker