📄 tcpclnt.h
字号:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright (C), 2005, TopBond Tech. Co., Ltd.
* File name: TCPCLNT.H
* Module name: 以客户端方式建立TCP连接的模块
* Author/Date: WuHuan 06/02/14
* Version: Ver 1.0
* Description: 以客户端方式(或称主动方式)建立TCP连接系列函数的头文件
* Others: 如有改动,请在下面的历史记录登记,谢谢合作!
------------------History-----------------------------
* Modifier/Date: //修订人及修订日期
* Modify Reason: //修订原因
* Modification: //修订的内容和位置的简要说明
------------------------------------------------------
* Modifier/Date: //修订人及修订日期
* Modify Reason: //修订原因
* Modification: //修订的内容和位置的简要说明
------------------------------------------------------
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#if !defined( _TCPCLNT_H )
#define _TCPCLNT_H
enum CONN_STATE { CLOSED=0, START, OPEN, FAIL };
struct SERVER_ID
{
char IPStr[20]; //接收IP地址的字符串数组
int Port; //存储端口号的变量
SERVER_ID& operator = (SERVER_ID& );
};
class TCPClientManager
{
protected:
int Conno; //存储连接号的变量
CONN_STATE ConnState; //存储TCP的状态
int netprocessnum;
unsigned long Timeout; //超时的变量 = 0: no timeout
unsigned long StartTick; //计时的起点
////////////////////////////////////////////add by wuhuan 2006.7.14
unsigned long TalkTimeout; //超时的变量 = 0: no timeout
unsigned long TalkStartTick; //计时的起点
int ServerNum;
struct SERVER_ID* pHost; //定义结构体指针变量
public:
void SetServerNum(int num)
{
ServerNum = (num+1);
};
TCPClientManager( ); //定义构造函数,对类的数据进行初始化
~TCPClientManager( ); //定义析构函数,释放类占用的内存空间
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :Init( struct SERVER_ID* pSvrID );
**
** 功能描述 :获取服务端的IP地址和端口号;
**
** 参 数 :结构体SERVER_ID的指针变量;
**
** 返 回 值 : 无;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void Init( struct SERVER_ID* pSvrID );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :SetTimeoutCnt( long NumTick );
**
** 功能描述 :用于设置Timeout的时间;
**
** 参 数 :NumTick为设置超时时间的Tick值,一个Tick值约为55ms,
** 如果NumTick=0则表明不用设置超时;
**
** 返 回 值 : 0 正常返回值;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int SetTimeoutCnt( long NumTick );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :IsTimeout( );
**
** 功能描述 :检查是否超时;
**
** 参 数 :无;
**
** 返 回 值 :
** 0 :没有超时;
** 1 ;已经超时;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int IsTimeout( );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :CONN_STATE Running( );
**
** 功能描述 :作为TCPCliend的主要运行函数。包括三项处理:
** 1) 连接处于CLOSED状态,则打开一个新的连接,
** 连接打开成功后,其状态由 CLOSED转换到 START。
** 2) 连接处于START状态,则检查连接是否建立,
** 同时检查超时时间,如果连接建立,其状态由START转换到 OPEN;
** 如果时间超时连接还未建立,则关闭连接,状态又回到CLOSED。
** 3) 连接处于OPEN状态,则检查连接是否有异常,或是被对方关闭,
** 如果没有检查到则一直保持OPEN状态,否则将关闭TCP连接,
** 其状态回到CLOSED。 该函数返回TCP连接的状态。
**
** 参 数 :无;
**
** 返 回 值 :返回TCP连接的状态。
** CLOSED : 连接处于关闭状态;
** START : 连接正在建立中;
** OPEN : 连接建立成功;
** FAIL : 函数处理错误;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
CONN_STATE Running( );
CONN_STATE GetConnState( )
{
return (ConnState);
};
//////////////////////////////////////add by zjs on 2006.03.06
SERVER_ID* GetServer_ID()
{
return(pHost);
};
////////////////////////////////////////////////
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :WriteData( char* DatBuf, int DatLen );
**
** 功能描述 :通过TCP连接发送数据。该函数对于连接状态处于OPEN时才有效。
**
** 参 数 :
** char* DatBuf: 存放发送数据的缓冲区BUFF地址;
** int DatLen : 待发送的字节长度;
**
** 返 回 值 :
** >=0 : 正常返回,返回值为实际发送的字节数;
** EBADF :无效连接号,发送操作未执行;
** ENOBUFS :没有缓冲区空间;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int WriteData( char* DatBuf, int DatLen );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :ReadData( char* DatBuf, int DatLen );
**
** 功能描述 :检查TCP是否有数据可读取,如果有则从指定连接号中
** 读取网络接口接收到的数据。该函数对于连接状态处于OPEN时才有效。
**
** 参 数 :
** char* DatBuf: 存放读出数据的缓冲区BUFF地址;
** int DatLen : 缓冲区的字节长度;
**
** 返 回 值 :
** >0 : 正常返回,返回值为实际读取的字节数;
** =0 : 无可读取的数据;
** EBADF :无效连接号,读取操作未执行;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int ReadData( char* DatBuf, int DatLen );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
**
** 函 数 :Close( );
**
** 功能描述 :关闭已打开的连接;
**
** 参 数 :无;
**
** 返 回 值 :
** 0 :正常关闭;
** EBADF :无效连接号,关闭操作未执行;
**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int Close( );
/////////////////////////////////////////////add by wuhuan 2007.7.14
int SetTalkTimeoutCnt( long NumTick );
int TalkIsTimeout( );
};
//对定义的类的对象的指针作外部声明
extern class TCPClientManager* TCPManager[];
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -