MFC - 網際網路程式設計



Microsoft 提供了許多用於程式設計客戶端和伺服器應用程式的 API。許多新的應用程式正在為網際網路編寫,並且隨著技術、瀏覽器功能和安全選項的變化,將編寫新型的應用程式。您的自定義應用程式可以檢索資訊並在網際網路上提供資料。

MFC 提供了一個CSocket類,用於使用 Windows Sockets 編寫網路通訊程式。

以下是 CSocket 類中的方法列表。

序號 名稱和描述
1

Attach

將 SOCKET 控制代碼附加到 CSocket 物件。

2

CancelBlockingCall

取消當前正在進行的阻塞呼叫。

3

Create

建立一個套接字。

4

FromHandle

給定 SOCKET 控制代碼,返回指向 CSocket 物件的指標。

5

IsBlocking

確定是否正在進行阻塞呼叫。

讓我們透過建立一個 MFS SDI 應用程式來了解一個簡單的示例。

MFCServer

步驟 1 - 在名稱欄位中輸入 MFCServer 並單擊確定。

MFCServer

步驟 2 - 在“高階功能”選項卡上,選中“Windows 套接字”選項。

步驟 3 - 建立專案後,新增一個新的 MFC 類 CServerSocket。

MFCServer

步驟 4 - 選擇 CSocket 作為基類,然後單擊“完成”。

步驟 5 - 新增更多 MFC 類 CReceivingSocket。

MFCServer

步驟 6 - CRecevingSocket 將接收來自客戶端的傳入訊息。

在 CMFCServerApp 中,標頭檔案包含以下檔案:

#include "ServerSocket.h"
#include "MFCServerView.h"

步驟 7 - 在 CMFCServerApp 類中新增以下兩個類變數。

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 對話方塊的應用程式。

Client Side

Client Side

步驟 2 - 在“高階功能”選項卡上,選中“Windows 套接字”選項,如上所示。

步驟 3 - 建立專案後,設計您的對話方塊,如下面的快照所示。

Client Side

步驟 4 - 為“連線”和“傳送”按鈕新增事件處理程式。

步驟 5 - 為所有三個編輯控制元件新增值變數。對於埠編輯控制元件,選擇變數型別 UINT。

Client Side

步驟 6 - 新增用於連線和傳送訊息的 MFC 類。

Client Side

步驟 7 - 在標頭檔案 CMFCClientDemoApp 類中包含 CClientSocket 類的標頭檔案並新增類變數。同樣,也在 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 和埠,然後單擊“連線”。

Client Side

步驟 11 - 您現在將在伺服器端看到訊息,如下面的快照所示。

Client Side
廣告
© . All rights reserved.