MFC-インターネットプログラミング
Microsoftは、クライアントアプリケーションとサーバーアプリケーションの両方をプログラミングするための多くのAPIを提供しています。多くの新しいアプリケーションがインターネット用に作成されており、テクノロジ、ブラウザ機能、およびセキュリティオプションが変更されると、新しいタイプのアプリケーションが作成されます。カスタムアプリケーションは、インターネット上で情報を取得してデータを提供できます。
MFCはクラスを提供します CSocket WindowsSocketsを使用してネットワーク通信プログラムを作成するため。
CSocketクラスのメソッドのリストは次のとおりです。
| シニア番号 | 名前と説明 | 
|---|---|
| 1 | Attach SOCKETハンドルをCSocketオブジェクトに接続します。  | 
| 2 | CancelBlockingCall 現在進行中のブロッキング呼び出しをキャンセルします。  | 
| 3 | Create ソケットを作成します。  | 
| 4 | FromHandle SOCKETハンドルを指定して、CSocketオブジェクトへのポインターを返します。  | 
| 5 | IsBlocking ブロッキングコールが進行中であるかどうかを判別します。  | 
MFSSDIアプリケーションを作成して簡単な例を見てみましょう。
                Step 1 −名前フィールドにMFCServerと入力し、[OK]をクリックします。
                Step 2 − [Advanced Features]タブで、[Windowsソケット]オプションをオンにします。
Step 3 −プロジェクトが作成されたら、新しいMFCクラスCServerSocketを追加します。
                Step 4 −基本クラスとしてCSocketを選択し、[完了]をクリックします。
Step 5 −MFCクラスCReceivingSocketをさらに追加します。
                Step 6 − CRecevingSocketは、クライアントからの着信メッセージを受信します。
CMFCServerAppでは、ヘッダーファイルには次のファイルが含まれています-
#include "ServerSocket.h"
#include "MFCServerView.h"
Step 7 −CMFCServerAppクラスに次の2つのクラス変数を追加します。
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
Step 8 − CMFCServerApp :: InitInstance()メソッドで、ソケットを作成してポートを指定し、次に示すようにListenメソッドを呼び出します。
m_serverSocket.Create(6666);
m_serverSocket.Listen();
Step 9 −CMFCServerViewヘッダーファイルに次のヘッダーファイルをインクルードします。
#include "MFCServerDoc.h"
Step 10 −SocketクラスのOnAccept関数をオーバーライドします。
                Step 11−クラスビューでCServerSocketを選択し、プロパティウィンドウで強調表示されたアイコンを選択します。次に、OnAcceptを追加します。これがOnAccept関数の実装です。
void CServerSocket::OnAccept(int nErrorCode) {
   // TODO: Add your specialized code here and/or call the base class
   AfxMessageBox(L"Connection accepted");
   CSocket::OnAccept(nErrorCode);
}
Step 12 − OnReceive()関数を追加します。
void CServerSocket::OnReceive(int nErrorCode) { 
   
   // TODO: Add your specialized code here and/or call the base class
   AfxMessageBox(L"Data Received");
   CSocket::OnReceive(nErrorCode);
}
Step 13 − CReceivingSocketクラスにOnReceive()関数を追加します。
ソリューションエクスプローラーでCMFCServerViewクラスを右クリックし、[追加]→[AddFunction]を選択します。
                Step 14 −上記の情報を入力し、[完了]をクリックします。
Step 15 −CMFCServerViewヘッダーファイルに次のCStringArray変数を追加します。
CStringArray m_msgArray;
Step 16 − AddMsg()関数の実装は次のとおりです。
void CMFCServerView::AddMsg(CString message) {
   m_msgArray.Add(message);
   Invalidate();
}
Step 17 −次のコードに示すように、コンストラクターを更新します。
CMFCServerView::CMFCServerView() {
   ((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
Step 18 −メッセージを表示するOnDraw()関数の実装は次のとおりです。
void CMFCServerView::OnDraw(CDC* pDC) {
   int y = 100;
   for (int i = 0; m_msgArray.GetSize(); i++) {
   
      pDC->TextOut(100, y, m_msgArray.GetAt(i));
      y += 50;
   }
   CMFCServerDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;
   // TODO: add draw code for native data here
}
Step 19−サーバー側が完成しました。クライアントからメッセージを受信します。
クライアント側アプリケーションの作成
Step 1 −クライアント側アプリケーション用の新しいMFCダイアログベースのアプリケーションを作成しましょう。
                
                Step 2 − [Advanced Features]タブで、上記のように[Windowssockets]オプションをオンにします。
Step 3 −プロジェクトが作成されたら、次のスナップショットに示すようにダイアログボックスを設計します。
                Step 4 − [接続]ボタンと[送信]ボタンのイベントハンドラーを追加します。
Step 5−3つの編集コントロールすべてに値変数を追加します。ポート編集制御には、変数タイプUINTを選択します。
                Step 6 −メッセージを接続および送信するためのMFCクラスを追加します。
                Step 7− CClientSocketクラスのヘッダーファイルをヘッダーファイルCMFCClientDemoAppクラスにインクルードし、クラス変数を追加します。同様に、CMFCClientDemoDlgヘッダーファイルにもクラス変数を追加します。
CClientSocket m_clientSocket;
Step 8 −これが接続ボタンイベントハンドラーの実装です。
void CMFCClientDemoDlg::OnBnClickedButtonConnect() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   m_clientSocket.Create();
   if (m_clientSocket.Connect(m_ipAddress, m_port)) {
      AfxMessageBox(L"Connection Successfull");
   }else {
      AfxMessageBox(L"Connection Failed");
   }
   DWORD error = GetLastError();
}
Step 9 −これは送信ボタンイベントハンドラーの実装です。
void CMFCClientDemoDlg::OnBnClickedButtonSend() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   if (m_clientSocket.Send(m_message.GetBuffer(m_message.GetLength()), m_message.GetLength())) {
   
   }else {
      AfxMessageBox(L"Failed to send message");
   }
}
Step 10−最初にサーバーアプリケーションを実行し、次にクライアントアプリケーションを実行します。ローカルホストのIPとポートを入力し、[接続]をクリックします。
                Step 11 −次のスナップショットに示すように、サーバー側にメッセージが表示されます。