Mfc-internet-programming

提供:Dev Guides
移動先:案内検索

MFC-インターネットプログラミング

Microsoftは、クライアントアプリケーションとサーバーアプリケーションの両方をプログラミングするための多くのAPIを提供しています。 多くの新しいアプリケーションがインターネット用に作成されており、テクノロジ、ブラウザ機能、およびセキュリティオプションが変更されると、新しい種類のアプリケーションが作成されます。 カスタムアプリケーションは、インターネットで情報を取得してデータを提供できます。

MFCは、Windows Socketsでネットワーク通信プログラムを作成するためのクラス CSocket を提供します。

以下は、CSocketクラスのメソッドのリストです。

Sr.No. Name & Description
1

Attach

SOCKETハンドルをCSocketオブジェクトにアタッチします。

2

CancelBlockingCall

現在進行中のブロッキングコールをキャンセルします。

3

Create

ソケットを作成します。

4

FromHandle

SOCKETハンドルを指定すると、CSocketオブジェクトへのポインターを返します。

5

IsBlocking

ブロッキングコールが進行中かどうかを判別します。

MFS SDIアプリケーションを作成して、簡単な例を見てみましょう。

MFCServer

  • ステップ1 *-名前フィールドにMFCServerを入力し、[OK]をクリックします。

MFCServer

  • ステップ2 *-[高度な機能]タブで、Windowsソケットオプションを確認します。
  • ステップ3 *-プロジェクトが作成されたら、新しいMFCクラスCServerSocketを追加します。

MFCServer

  • ステップ4 *-ベースクラスとしてCSocketを選択し、[完了]をクリックします。
  • ステップ5 *-MFCクラスCReceivingSocketを追加します。

MFCServer

  • ステップ6 *-CRecevingSocketはクライアントから着信メッセージを受信します。

CMFCServerAppでは、ヘッダーファイルには次のファイルが含まれています-

#include "ServerSocket.h"
#include "MFCServerView.h"
  • ステップ7 *-CMFCServerAppクラスに次の2つのクラス変数を追加します。
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
*ステップ8 *-CMFCServerApp
InitInstance()メソッドで、ソケットを作成してポートを指定し、次に示すようにListenメソッドを呼び出します。
m_serverSocket.Create(6666);
m_serverSocket.Listen();
  • ステップ9 *-CMFCServerViewヘッダーファイルに次のヘッダーファイルを含めます。
#include "MFCServerDoc.h"
  • ステップ10 *-SocketクラスのOnAccept関数をオーバーライドします。

MFCServer

  • ステップ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);
}
  • ステップ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);
}
  • ステップ13 *-CReceivingSocketクラスにOnReceive()関数を追加します。

ソリューションエクスプローラーでCMFCServerViewクラスを右クリックし、[追加]→[関数の追加]を選択します。

MFCServer

  • ステップ14 *-上記の情報を入力し、完了をクリックします。
  • ステップ15 *-CMFCServerViewヘッダーファイルに次のCStringArray変数を追加します。
CStringArray m_msgArray;
  • ステップ16 *-AddMsg()関数の実装です。
void CMFCServerView::AddMsg(CString message) {

   m_msgArray.Add(message);
   Invalidate();
}
  • ステップ17 *-次のコードに示すようにコンストラクタを更新します。
CMFCServerView::CMFCServerView() {

   ((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
  • ステップ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
}
  • ステップ19 *-サーバー側はこれで完了です。 クライアントからメッセージを受信します。

クライアント側アプリケーションを作成する

  • ステップ1 *-クライアント側アプリケーション用の新しいMFCダイアログベースのアプリケーションを作成しましょう。

クライアント側

クライアント側

  • ステップ2 *-[高度な機能]タブで、上記のようにWindowsソケットオプションをチェックします。
  • ステップ3 *-プロジェクトが作成されたら、次のスナップショットに示すようにダイアログボックスを設計します。

クライアント側

  • ステップ4 *-[接続]ボタンと[送信]ボタンのイベントハンドラーを追加します。
  • ステップ5 *-3つの編集コントロールすべてに値変数を追加します。 ポート編集制御の場合、変数タイプUINTを選択します。

クライアント側

  • ステップ6 *-メッセージを接続および送信するためのMFCクラスを追加します。

クライアント側

  • ステップ7 *-CClientSocketクラスのヘッダーファイルをヘッダーファイルCMFCClientDemoAppクラスに含め、クラス変数を追加します。 同様に、CMFCClientDemoDlgヘッダーファイルにもクラス変数を追加します。
CClientSocket m_clientSocket;
  • ステップ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();
}
  • ステップ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");
   }
}
  • ステップ10 *-最初にサーバーアプリケーションを実行し、次にクライアントアプリケーションを実行します。 ローカルホストのIPとポートを入力し、[接続]をクリックします。

クライアント側

  • ステップ11 *-次のスナップショットに示すように、サーバー側にメッセージが表示されます。

クライアント側