首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

VC++ 基於 TCP/IP 區域網路多使用者通訊實作 (一)

     編輯:VC++

前言

隨著網路應用普及,TCP/IP 成為首選協議。本文系列將實作支援多使用者同時線上、訊息互發的區域網路聊天/通訊系統,運用多執行緒與共享資料結構實現伺服器轉發功能。

技術架構概覽

1. TCP/IP Socket 通訊基礎

伺服器端流程:

  1. socket() 建立監聽 Socket
  2. bind() 綁定 IP/埠
  3. listen() 進入監聽狀態
  4. accept() 接受用戶端連線
  5. send()/recv() 資料收發
  6. closesocket() 關閉連線

用戶端流程:

  1. socket() 建立 Socket
  2. connect() 連接伺服器
  3. 建立接收執行緒
  4. send()/recv() 資料收發
  5. closesocket() 關閉

2. 多執行緒支援多用戶

  • 執行緒 = 進程中的一個執行點,共享進程位址空間、資料、程式碼
  • 各執行緒擁有獨立堆疊,不可互存取
  • 排程:時間片輪換或優先權制
  • 伺服器策略:accept() 無限迴圈,每新連線建立兩個執行緒 (送/收) 專責該用戶通訊

3. 共享資料結構實現伺服器轉發

  • 同進程多執行緒共享線性位址空間 → 資料結構共享極便利
  • 必須採用互斥同步 (Mutex/Critical Section) 保護共享資料
  • 核心結構:線上用戶清單 (Socket、用戶名、狀態) + 訊息佇列
  • 轉發邏輯:收到用戶 A 訊息 → 鎖定清單 → 遍歷其他用戶 Socket → send() 轉發

關鍵資料結構設計

struct USER_INFO
{
    SOCKET      sock;           // 用戶 Socket
    CString     strName;        // 用戶名稱
    BOOL        bActive;        // 是否在線
    HANDLE      hRecvThread;    // 接收執行緒
    HANDLE      hSendThread;    // 發送執行緒
};

class CServerCore
{
    CList m_UserList; // 線上用戶
    CCriticalSection m_csList;                // 保護清單
    
public:
    BOOL AddUser(SOCKET s, LPCTSTR pszName);
    BOOL RemoveUser(SOCKET s);
    void BroadcastMessage(LPCTSTR pszMsg, SOCKET exceptSock = INVALID_SOCKET);
    // ...
};

下一篇預告

將提供完整伺服器/用戶端原始碼實作,包含:

  • 用戶登入/登出協議
  • 訊息封包格式定義 (長度 + 類型 + 內容)
  • 非同步收發執行緒模型
  • 伺服器管理介面 (踢人、廣播、日誌)
  • 用戶端自動重連、斷線偵測

作者:袁淵 (華東船舶工業學院)

關鍵字:TCP/IP、多執行緒、共享記憶體、網路通訊、Socket 程式設計

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