目录
1、NBlockSocket.h类:
(1)、Init接口函数
(2)、Register接口函数
(3)、Send接口函数
(4)、Accept接口函数
(5)、Recv接口函数
2、实现通讯:
(1)、初始化服务器,注册回调函数
(2)、回调函数
(3)、实现信息的分发和显示
3、配置类的添加:
(1)、数据解释写入文档
(2)、数据解析查找文档
4、运行UI:
1、NBlockSocket.h类:
(1)、Init接口函数
bool Init(int port);
初始化Socket,创建用于监听的Socket,设置Socket为非阻塞模式,设置服务器Socket地址,绑定Socket Server到本地地址,监听
(2)、Register接口函数
void Register(void *hWin, int id, CBFun pCallBack);
传递当前窗口指针,唯一标识当前回调函数的ID和回调函数
(3)、Send接口函数
bool Send(CString msg);
服务端分发消息
(4)、Accept接口函数
bool Accept();
函数的作用接收客户端连接请求,并根据不同情况返回状态值,当连接客户端成功会调用回调函数来处理客户端发送的数据
(5)、Recv接口函数
bool Recv()
函数作用接收数据
2、实现通讯:
(1)、初始化服务器,注册回调函数
// 初始化服务端,指定监听的端口号
int port = 8080; // 指定监听的端口号
m_nsocketserver.Init(port);// 注册回调函数,用于处理接收到的消息
m_nsocketserver.Register(this, 1, &CTCPServerDlg::OnSocketMessage);
(2)、回调函数
回调函数要设置为静态成员函数目的:
非静态成员函数属于对象,他默认指针指向它的对象,在没有实例化的情况下无法确定this指针。静态成员函数属于类,回调函数需要经常访问其他的类,为了避免一直需要实例化对象,所以设置为静态成员函数
定义回调函数,定义指向回调函数的指针类型
typedef void(*CBFun)(void *hWin,int id, char *);/*类型别名CBFun,它表示指向函数的指针*/
void Register(void *hWin, int id, CBFun pCallBack);
声明回调函数,静态,指针类型
static void OnSocketMessage(void *hWin, int id, char *msg);
注册回调函数
// 注册回调函数,用于处理接收到的消息
m_nsocketserver.Register(this, 1, &CTCPServerDlg::OnSocketMessage);
(3)、实现信息的分发和显示
实现回调函数
CTCPServerDlg *pdlg = static_cast<CTCPServerDlg*>(hWin);//传递的指针void*强制转换
CString strMsg(msg);
pdlg->SetDlgItemTextW(IDC_EDIT_MESSAGE, strMsg);
pdlg->m_nsocketserver.Send(strMsg);//分发消息
pdlg->SetDlgItemTextW(IDC_EDIT_MESSAGE, strMsg);
3、配置类的添加:
(1)、数据解释写入文档
if (pdlg->IsDlgButtonChecked(IDC_CHECK_ADD_PRESE))
{
CString filepath = L"绝对路径";
CString sectionName = L"Section2";
CString variableName = L"1";
CString valueToWrite = L"找到1";
IniFileWrite(sectionName, variableName, valueToWrite, filepath);
pdlg->MessageBox(L"写入成功!");
pdlg->m_nsocketserver.Send(strMsg);//分发消息
pdlg->SetDlgItemTextW(IDC_EDIT_MESSAGE, strMsg);
}
(2)、数据解析查找文档
else if (pdlg->IsDlgButtonChecked(IDC_CHECK_PRASE))
{
CString filepath = L"绝对路径";
const CString cstr = L"未找到";
pdlg->m_nsocketserver.Send(strMsg);//分发消息
pdlg->GetDlgItemTextW(IDC_EDIT_MESSAGE, strMsg);
strMsg = IniFileRead(L"Section2", strMsg, cstr, filepath);
pdlg->SetDlgItemTextW(IDC_EDIT_MESSAGE, strMsg);
}