MFC-网络编程TCP服务端(NBlockSocket)

目录

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);

}

4、运行UI:

相关推荐
北京耐用通信22 分钟前
无缝衔接·高效传输——耐达讯自动化CC-Link IE转Modbus TCP核心解决方案
网络·人工智能·物联网·网络协议·自动化·信息与通信
亚空间仓鼠44 分钟前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
聊点儿技术1 小时前
CDN调度失准导致跨省流量浪费?在GSLB层用IP归属地查询实现精准就近接入
网络·ip·ip归属地查询·ip地址查询·ip离线库·cdn调度
咸鱼嵌入式1 小时前
【AutoSAR】详解PDUR模块
网络
AI成长日志2 小时前
【AI原生开发实战】1.2 传统开发 vs AI原生开发:思维转变与架构差异
服务器·架构·ai-native
戮戮2 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
2301_780789662 小时前
零信任架构在云安全落地过程中的最佳实践
服务器·人工智能·游戏·架构·零信任
[ ]8982 小时前
Stack_MLAG_知识点梳理
网络·笔记·网络协议
上海云盾-小余2 小时前
精准抵御流量攻击:高防 IP + 游戏盾组合部署实战详解
网络·tcp/ip·游戏
the sun342 小时前
从 QEMU 直接启动到 U-Boot 引导:嵌入式 Linux 启动流程的本质差异
linux·运维·服务器