📄 mod_tcpclient.h
字号:
#ifndef _MOD_TCPCLIENT_H
#define _MOD_TCPCLIENT_H
/************************************************************************/
/* 定义TCP模块通知父窗口的消息 */
/************************************************************************/
#define WM_USER_GPS_TCP WM_USER + 1000
/************************************************************************/
/* 消息WM_USER_GPS_TCP的WPARAM可选值
/* LPARAM为一字符串,描述消息的内容
/************************************************************************/
#define TCP_BASE 0
#define TCP_ERROR TCP_BASE + 1 // TCP通信出现错误
#define TCP_DISCONNECT TCP_BASE + 2 // TCP链路断开
#define TCP_DATA_RECV TCP_BASE + 3 // TCP通信接收到数据
#define TCP_SUCCESS TCP_BASE + 4 // TCP链路建立成功
/************************************************************************/
/********************窗口主程序的响应模块示例 ***************************
ON_MESSAGE(WM_USER_GPS_TCP, OnTcpMessage)
LRESULT OnTcpMessage(WPARAM wParam, LPARAM lParam)
{
char buffer[1024];
int buflen;
CString msg;
// 假定szIp,nPort是所连接的服务器的IP地址和端口
switch(wParam)
{
case TCP_ERROR:
msg = (LPCTSTR)lParam; // lParam是错误的消息内容
// 错误处理
modTcp_End(szIp, nPort); // 卸载TCP模块
break;
case TCP_DISCONNECT:
msg = (LPCTSTR)lParam; // lParam是TCP链路断开的消息内容
// 链路断开的处理
modTcp_End(szIp, nPort); // 卸载TCP 模块
break;
case TCP_DATA_RECV:
while(! modTcp_GetBuff(szIp,nPort, buffer, &buflen))
{
// 对从缓冲区中取出的数据进行处理,例如加入写串口的队列
}
break;
}
}
************************************************************************/
/************************************************************************/
/* TCP模块初始化,启动TcpClient线程
/* 参数:@ 服务器IP地址
/* @ 服务器端口号
/* @ 数据缓冲队列最大容量,按照一块1024字节计算,
/* 例如 nBuffMax=32 ,表示容量为32K的缓冲队列
/* @ 窗口句柄,该窗口接收TCP模块发出的消息
/* @ 发给TCP服务器的初始化串
/* @ 初始化串的长度
/************************************************************************/
extern "C" bool modTcp_Init(LPCTSTR szIPaddr, UINT nPort, UINT nBuffMax, HWND hWnd,
LPCTSTR initStr, UINT ninitLen);
// PASCAL EXPORT
/************************************************************************/
/* TCP模块终止
/* 参数: @ 服务器IP地址
/* @ 服务器端口号
/* 返回值: 成功结束TCP模块返回true,否则返回false
/*
/************************************************************************/
extern "C" bool modTcp_End(LPCTSTR szIPaddr, UINT nPort);
/************************************************************************/
/* 将待发送数据加入TCP模块的发送队列
/* 参数: @ 服务器IP地址
/* @ 服务器端口号
/* @ 待发送的数据
/* @ 待发送数据的长度
/* 返回值: 成功将数据加入发送队列返回true,否则返回false
/*
/************************************************************************/
extern "C" bool modTcp_Send(LPCTSTR szIPaddr, UINT nPort, const char *pMsg, int nLen);
/************************************************************************/
/* 由数据缓冲队列取出数据
/* 参数:@ 存放缓冲数据的地址
/* @ 取得数据的长度
/* 返回值:取得缓冲数据则返回true,未取得则返回false
/* 注意:
/* @当主线程收到消息的wParam值为TCP_DATA_RECV时,在一个循环内不断调用该函数,
/* 直到该函数返回false为止,将收到的数据做进一步处理,比如写串口等;
/* @当主线程收到消息的wParam值为TCP_DISCONNECT时,应该不断调用该函数,
/* 将缓冲区内的有效数据取完。
/************************************************************************/
extern "C" bool modTcp_GetBuff(LPCTSTR szIPaddr, UINT nPort ,char * pBuff, int *pLen);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -