關鍵字: tcp udp pipe 通信
原作者姓名: 聞怡洋
轉載請與作者聯系
介紹
v 2.0版本
正文
網絡通信開發包說明與開發手冊
項目名稱:N/A
系統名稱:N/A
子系統名稱:N/A
密級:
2002/01/29
作者/修改者 版本 修改原因 時間
聞怡洋 Alpha 0.9 創建功能介紹
創建類定義與說明 2002/01/29
聞怡洋 Alpha 2.0 添加UDP支持
以DLL形式提供
添加類圖 2002/06/25
相關文檔:
其他說明:如果有任何問題和功能上的補充請聯系聞怡洋
目錄
第 1 章 介紹 3
1.1 解決的問題 3
1.2 實現方法介紹 3
1.3 名字空間 3
1.4 版本規劃 3
第 2 章 類與API功能介紹 4
2.1 類圖 4
2.2 錯誤類型定義 4
2.3 基礎類:CIPCCOMM 5
2.3.1 構造 5
2.3.2 接收數據 5
2.3.3 發送數據 5
2.3.4 檢測函數 6
2.4 TCP SOCKET支持類:CIPCSOCKET 6
2.4.1 構造 6
2.4.2 Socket創建 6
2.5 UDP SOCKET支持類:CUDPSOCKET 7
2.5.1 數據發送 7
2.6 NAMEDPIPE支持類:CIPCNAMEDPIPE 7
2.6.1 構造 7
2.6.2 NamedPipe創建 7
第 3 章 版本V2.0功能介紹 9
3.1 文件 9
3.2 可以完成的功能 9
3.3 不能完成的功能 9
第 4 章 示范代碼說明 10
4.1 文件列表 10
第 1 章 介紹
1.1 解決的問題
開發一套易用的網絡通信包,以C++形式對功能進行封裝。
1.2 實現方法介紹
對WinSocket和NamedPipe的API函數進行封裝,並且提供部分API函數完成連接的建立和數據檢測功能。
1.3 名字空間
commPIC
在使用時要使用下面語句引用:using namespace commIPC;
1.4 版本規劃
• V1.0支持基於Socket和Named Pipe的通信方式。
• V2.0支持非連接方式通信。
第 2 章 類與API功能介紹
2.1 類圖
2.2 錯誤類型定義
//定義錯誤類型
//成功
#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
2.3 基礎類:CIPCComm
定義了通信類的所有功能函數。
2.3.1 構造
CIPCComm(){};
2.3.2 接收數據
直到完全讀入數據,或是錯誤發生
virtual int Recv(const int iWant,BYTE* pbBuf,int& iRead)=0;
在規定時間內讀入要求數量的數據,盡可能多的讀入數據
virtual int RecvWithTimeOut(int iTimeout,const int iWant,BYTE* pbBuf,int&
iRead)=0;
檢測數據並讀入,在檢測到數據後只進行一次讀操作
virtual int TestAndRecv(int iTimeout,const int iWant,BYTE* pbBuf,int&
iRead)=0;
2.3.3 發送數據
直到完全寫出數據,或是錯誤發生
virtual int Send(const int iWant,const BYTE *pbBuf,int& iWrote)=0;
2.3.4 檢測函數
測試是否有數據到達
virtual int TestRead(int iTimeOut)=0;
測試是否有連接到達
virtual int TestConnect(int iTimeOut)=0;
2.4 TCP Socket支持類:CIPCSocket
2.4.1 構造
通過現有的Socket創建對象,fAutoDel表明在對象被刪除時是否自動關閉Socket。
CIPCSocket(SOCKET sockComm,BOOL fAutoDel=FALSE);
2.4.2 Socket創建
創建服務器端Socket
pszLocalAddr表明本地的IP地址,如果為NULL表明將Socket綁定到所有地址上。
static SOCKET CreateListenSocket(LPCSTR pszLocalAddr,UINT uPort)
創建客戶端Socket
創建後將連接到服務器端,pszLocalAddr表明本地的IP地址,如果為NULL表明將Socket綁定到所有地址上。
static SOCKET CreateConnectSocket(LPCSTR pszRemoteAddr,int iPort,LPCSTR
pszLocalAddr)
在服務器端等待並建立與客戶端的連接
可以通過pszHost piPort得到客戶端的地址和端口
static SOCKET CreateAcceptSocket(SOCKET sockListen,char* pszHost,int
*piPort)
創建UDP Socket
發送發可以不指明端口,但接收方必須指明端口。
static SOCKET CreateUDPSocket(int iLocalPort,LPCSTR pszLocalAddr)
2.5 UDP Socket支持類:CUDPSocket
2.5.1 數據發送
在父類基礎上添加UDP的數據發送和接收函數。
發送時指明對方IP和端口號。
int SendTo(const int iWant,const BYTE* pbBuf,int& iWrote,LPCSTR
pszHost,const int iPort);
接收數據時可以通過pszHost piPort得到發送方的地址和端口。
int RecvFrom(const int iWant,const BYTE* pbBuf,int& iRead,char*
pszHost=NULL,int *piPort=NULL);
2.6 NamedPipe支持類:CIPCNamedPipe
2.6.1 構造
通過現有的NamedPipe創建對象,fAutoDel表明在對象被刪除時是否自動關閉NamedPipe。
CIPCNamedPipe(HANDLE hPipe,BOOL fAutoDel=FALSE);
2.6.2 NamedPipe創建
使用API函數創建NamedPipe,有關NamedPipe命名規則請參考有關資料。iTimeout表示超時時長。
HANDLE SPCreateServerPipe(LPCSTR pszPipeName,int iTimeout=10);
HANDLE SPCreateClientPipe(LPCSTR pszPipeName,int iTimeout=10);
或者使用類中靜態成員函數創建。
static HANDLE CreateServerPipe(LPCSTR pszPipeName,int iTimeout=10);
static HANDLE CreateClientPipe(LPCSTR pszPipeName,int iTimeout=10);
與Socket不同的是,連接一旦創建成功就可以利用返回的句柄進行通信。
第 3 章 版本V2.0功能介紹
3.1 文件
include\commonIPC.h
commIPC\源代碼
lib\commonIPC_D.lib commonIPC_D.dll與commonIPC.lib commonIPC.DLL分別對應調試版本和發行版本
3.2 可以完成的功能
• 有連接通信中按照服務器和客戶端兩方面實現了連接的建立功能。
• 無連接通信中實現了UDP方式通信。
• 實現數據的發送接收。
• 支持數據的同步接收和異步接收。
• 支持數據的檢測和連接的檢測。
3.3 不能完成的功能
• 沒有實現網絡連接故障的檢測,例如物理上的斷線。
• UDP方式通信不支持廣播。
正文完