首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC Socket 程式設計:實現客戶端與伺服器端通訊的完整指南

     編輯:程式設計綜合問答

前言

在 MFC 應用程式中實現網路通訊是許多初學者面臨的挑戰。本文將詳細說明如何使用 MFC 的 CSocket 類別,建立一個簡單的商家端(伺服器)與客戶端(客戶)通訊範例,涵蓋標頭檔引入、關鍵函式覆寫、監聽與連線流程,並提供完整的程式碼架構供參考。

核心標頭檔與類別準備

在專案的 stdafx.h 或對應的標頭檔中,務必包含 <afxsock.h> 並連結 ws2_32.lib。接著分別建立兩個衍生類別:

  • 伺服器端:繼承 CAsyncSocket,覆寫 OnAccept 處理新連線請求。
  • 客戶端:繼承 CAsyncSocket,覆寫 OnConnect、OnReceive、OnClose 等事件。

伺服器端實作步驟

  1. 在對話方塊類別中宣告 CListenSocket m_listenSocket; 成員變數。
  2. 於 OnInitDialog 中呼叫 m_listenSocket.Create(port) 並 m_listenSocket.Listen() 開始監聽。
  3. 覆寫 OnAccept:當有客戶端連線時,建立新的 CClientSocket 物件,呼叫 Accept(*pClientSocket),並將該物件存入陣列或列表以便後續收發資料。

客戶端實作步驟

  1. 宣告 CClientSocket m_clientSocket;。
  2. 使用者點擊「連線」按鈕時,呼叫 m_clientSocket.Create() 並 m_clientSocket.Connect(serverIP, port)。
  3. 連線成功後,OnConnect 會被觸發,此時可啟用發送介面;OnReceive 用於讀取伺服器回傳資料;OnClose 處理斷線清理。

資料收發範例

// 發送
CString strMsg = _T("Hello Server");
m_clientSocket.Send(strMsg.GetBuffer(), strMsg.GetLength());

// 接收(OnReceive 中)
char buffer[1024];
int nRead = m_clientSocket.Receive(buffer, sizeof(buffer));
if (nRead > 0) {
    CString strRecv(buffer, nRead);
    // 更新 UI 顯示
}

常見問題與除錯技巧

  • 連線失敗:檢查防火牆、IP/埠號是否正確、伺服器是否已 Listen。
  • 資料亂碼:確認雙方編碼一致(Unicode/ANSI),建議使用固定長度或分隔符協定。
  • 多執行緒考量:MFC Socket 為非同步模型,UI 操作需在主執行緒,若處理耗時邏輯請另開工作者執行緒。

總結

掌握 CAsyncSocket 的事件驅動機制,配合正確的建立/監聽/連線流程,即可快速完成 MFC 網路通訊模組。建議先從單一客戶端測試,再擴充至多客戶端管理與心跳檢測機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved