要件は、前回の最初に書いた通りです。
今回はインターネットでマイクロソフトのサーバにつながる状態かどうかを調べる方法です。
実装は、CSocket クラスを用いることで、簡単にできるようです。
参考にさせてもらったのは、ソケット(バイトストリーム)を使用する(クライアント)です。
CSocket を使うために、MFC アプリケーションでないといけません。CSocket を使うにはMFCアプリケーションウィザードで、「Windowsソケット」にチェックを入れる必要あります。
それを忘れてた場合は、socketを使用するクラスに、afxsock.h をインクルードし(通常はstdafx.hに記述)、インスタンスの初期化 xxxxApp::InitInstance() の最初の方に、下記の記述を付け加えたらいいようです。
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
CSocket.Connect() で、サーバへのソケット接続ができたら、サーバにつながったことにします。
ソースは下記の通りです。接続できれば、true ,出来なければ false を返します。
/******************************************************************
Function Name: IsConnectNetwork
Description: 指定されたホストにたいして通信ができるかどうかを判断
Inputs: CString *msg 参照渡の文字列。メッセージを返す
Results: true 指定されたURL、ポートのホストにアクセスできた。
false アクセスできなかった
******************************************************************/
bool IsConnectNetwork(CString *msg)
{
BOOL bret;
// ソケットを作成
CSocket socket;
bret = socket.Create();
if( bret == FALSE)
{
//MessageBox(NULL, _T("ソケット作成失敗"), _T(""), MB_OK | MB_ICONINFORMATION );
*msg = "\n詳細:ソケット作成に失敗しました。";
return false;
}
CString strSv ;
strSv = "www.microsoft.com";
// サーバーへ接続する(ローカルを指定しています。)
bret = socket.Connect( ( strSv ), 80);
if( bret == FALSE)
{
//MessageBox(NULL, _T("サーバーへ接続失敗"), _T(""), MB_OK | MB_ICONINFORMATION );
*msg = "\n詳細:";
*msg += strSv ;
*msg += " に接続できませんでした。";
return false;
}
socket.Close();
return true;
}
その他の参考: