commIPC(使用 using namespace commIPC;)CIPCComm (抽象基底)
├── CIPCSocket // TCP Socket
├── CUDPSocket // UDP Socket
└── CIPCNamedPipe // Named Pipe
#define SP_ERR_SUCCESS 0
#define SP_ERR_NETWORK 1
#define SP_ERR_NOT_FINISH 2
#define SP_ERR_TIMEOUT 3
#define SP_ERR_NODATA 4
#define SP_ERR_NOT_IMPLEMENT 98
#define SP_ERR_GENERAL 99
CIPCComm| 分類 | 函數 | 說明 |
|---|---|---|
| 接收 | Recv(iWant, pbBuf, iRead) | 阻塞直到讀滿或錯誤 |
RecvWithTimeOut(iTimeout, iWant, pbBuf, iRead) | 指定逾時,盡可能讀入 | |
TestAndRecv(iTimeout, iWant, pbBuf, iRead) | 偵測到資料後單次讀取 | |
| 發送 | Send(iWant, pbBuf, iWrote) | 阻塞直到寫完或錯誤 |
| 偵測 | TestRead(iTimeOut) | 測試是否有資料到達 |
TestConnect(iTimeOut) | 測試是否有連線到達 |
CIPCSocketCIPCSocket(SOCKET sockComm, BOOL fAutoDel=FALSE);
fAutoDel:物件銷毀時是否自動關閉 Socket。
CreateListenSocket(pszLocalAddr, uPort):建立伺服器監聽 Socket。pszLocalAddr=NULL 綁定所有介面。CreateConnectSocket(pszRemoteAddr, iPort, pszLocalAddr):建立用戶端 Socket 並連線。CreateAcceptSocket(sockListen, pszHost, piPort):伺服器接受連線,可取得客戶端位址/埠。CreateUDPSocket(iLocalPort, pszLocalAddr):建立 UDP Socket(供 CUDPSocket 使用)。CUDPSocket// 發送指定目標
int SendTo(iWant, pbBuf, iWrote, pszHost, iPort);
// 接收並可取得來源
int RecvFrom(iWant, pbBuf, iRead, pszHost=NULL, piPort=NULL);
CIPCNamedPipeCIPCNamedPipe(HANDLE hPipe, BOOL fAutoDel=FALSE);
// 全域 API
HANDLE SPCreateServerPipe(pszPipeName, iTimeout=10);
HANDLE SPCreateClientPipe(pszPipeName, iTimeout=10);
// 類別靜態成員
static HANDLE CreateServerPipe(pszPipeName, iTimeout=10);
static HANDLE CreateClientPipe(pszPipeName, iTimeout=10);
Named Pipe 連線成功即可直接用句柄收發,無額外接受步驟。
include/commonIPC.hcommIPC/ 原始碼lib/commonIPC_D.lib/.dll (Debug) 、commonIPC.lib/.dll (Release)| 功能 | 支援 | 備註 |
|---|---|---|
| TCP 連線導向通訊 | ✓ | Server/Client 完整流程 |
| UDP 無連線通訊 | ✓ | SendTo/RecvFrom |
| Named Pipe 進程間通訊 | ✓ | Server/Client 建立 |
| 同步/非同步接收 | ✓ | Recv/RecvWithTimeOut/TestAndRecv |
| 資料/連線偵測 | ✓ | TestRead/TestConnect |
| 實體斷線偵測 | ✗ | 無心跳/保活機制 |
| UDP 廣播 | ✗ | 未實作 |
TestRead/TestConnect 實作事件驅動模型。