关键字: 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方式通信不支持广播。 正文完 |