隨著網路應用普及,TCP/IP 成為首選協議。本文系列將實作支援多使用者同時線上、訊息互發的區域網路聊天/通訊系統,運用多執行緒與共享資料結構實現伺服器轉發功能。
伺服器端流程:
socket() 建立監聽 Socketbind() 綁定 IP/埠listen() 進入監聽狀態accept() 接受用戶端連線send()/recv() 資料收發closesocket() 關閉連線用戶端流程:
socket() 建立 Socketconnect() 連接伺服器send()/recv() 資料收發closesocket() 關閉accept() 無限迴圈,每新連線建立兩個執行緒 (送/收) 專責該用戶通訊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 程式設計