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: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式任务调度(00)--Quartz

1 任务调度整体流程 2 组件 调度器 &#xff1a;工厂类创建Scheduler&#xff0c;根据触发器定义的时间规则调度任务任务&#xff1a;Job表示被调度的任务触发器&#xff1a;Trigger 定义调度时间的元素&#xff0c;按啥时间规则执行任务。一个Job可被多个Trigger关联&#xf…

nginx转发https到tomcat报错403

http请求转发正常&#xff0c;https返回403&#xff0c;nginx配置已添加proxy相关参数 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $s…

AI 绘画 | Stable Diffusion 图生图

图生图简介 Stable Diffusion 不仅可以文生图&#xff0c;还可以图生图。文生图就是完全用提示词文本去生成我们想要图片&#xff0c;但是很多时候会有词不达意的感觉。就像我们房子装修一样&#xff0c;我们只是通过文字描述很难表达出准确的想要的装修效果&#xff0c;如果能…

基于element-ui封装可配置表单组件

“vue”: “^2.7.13” “element-ui”: “^2.15.7” 代码地址 【说明】 该组件时使用vue3&#xff08;vue2.7&#xff09;语法封装&#xff0c;使用时可用vue2语法使用也可以使用vue3语法使用 一、vue2语法使用案例 基础用法 <template><div class"form-demo…

Freeswitch代码

1.引入依赖 Freeswitch依赖版本 <dependency><groupId>org.freeswitch.esl.client</groupId><artifactId>esl-client</artifactId><version>0.10.1</version> </dependency> 2.代码 import org.freeswitch.esl.client.inbound…

2311C++抽象工厂

1,为啥需要工厂设计模式?工厂设计模式可解决什么问题? 先看一下示例,多态示例. #include <iostream> using namespace std; class Shape { public:Shape() { }virtual void drawShape(){cout << "base draw shape" << endl;} }; class Rectang…

python循环改变循环体的操作

问题&#xff1a; python循环时循环体发生改变&#xff1f; 解决办法一 有时候在项目中我们遇到了循环体一直在改变怎么去循环&#xff1f;想到一个办法&#xff0c;记录下来&#xff0c;下次遇到直接上代码就可以。 # 循环一次获取一次 import random xinghao_name [] fo…

VR全景如何助力乡村振兴,乡村发展在哪些方面用到VR全景技术

引言&#xff1a; 乡村振兴是当今中国发展的重要战略&#xff0c;也是推动农村经济社会全面发展的关键举措。在这一过程中&#xff0c;虚拟现实&#xff08;VR&#xff09;全景技术正逐渐崭露头角&#xff0c;为乡村振兴提供了机遇。 一&#xff0e;VR全景技术的概念和应用 1…

[科研图像处理]用matlab平替image-j,有点麻烦,但很灵活!

做材料与生物相关方向的同学应该对image-j并不陌生&#xff0c;前几天有个师兄拜托我用image-j分析一些图片&#xff0c;但使用过后发现我由于不了解image-j的工作流程而对结果并不确信&#xff0c;而且image-j的功能无法拓展&#xff0c;对有些图片的处理效果并不好&#xff0…

SpringBoot获取运行环境 获取静态配置 SpringBoot获取配置文件和属性值 springboot获取配置文件

SpringBoot获取运行环境 获取静态配置 SpringBoot获取配置文件和属性值 springboot获取配置文件 使用 Environment 接口获取更多示例 使用 Environment 接口获取 使用 Environment.getProperty() 配置文件值 例如 获取当前 系统端口号的配置文件值 server.port Environment…

在Google Kubernetes集群创建分布式Jenkins(一)

因为项目需要&#xff0c;在GKE的集群上需要创建一个CICD的环境&#xff0c;记录一下安装部署一个分布式Jenkins集群的过程。 分布式Jenkins由一个主服务器和多个Agent组成&#xff0c;Agent可以执行主服务器分派的任务。如下图所示&#xff1a; 如上图&#xff0c;Jenkins Ag…

Golang爬虫封装

引言 爬虫是一种自动化地从网页中提取信息的程序&#xff0c;它在现代互联网的数据获取和分析中扮演着重要的角色。Golang作为一门强大的编程语言&#xff0c;也提供了丰富的工具和库来实现爬虫功能。在本文中&#xff0c;我们将探讨如何使用Golang来封装一个灵活、高效的爬虫…

ASO优化之为应用创建屏幕截图的技巧(下)

屏幕截图可以激发潜在用户对我们的应用程序的好奇心和兴趣。我们可以使用它们来吸引用户对产品页面的关注&#xff0c;解释应用程序&#xff0c;并强调其解决用户问题的能力。 1、美化屏幕截图背景。 为了使我们的屏幕截图更加有趣和美观&#xff0c;需要考虑使用背景。设计不…

【微服务】一体化智慧工地管理平台源码

智慧工地系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地让工程施工智能化 1、内容全面&#xff0c;多维度数…

Day1 ARM基础

【ARM课程认知】 1.ARM课程的作用 承上启下 基础授课阶段&#xff1a;c语言、数据结构、linux嵌入式应用层课程&#xff1a;IO、进程线程、网络编程嵌入式底层课程&#xff1a;ARM体系结构、系统移植、linux设备驱动c/QT 2.ARM课程需要掌握的内容 自己能够实现简单的汇编编…

登录Tomcat控制台,账号密码输入正确但点击登录没反应不跳转到控制台页面

在tomcat-users.xml里面可以查看登录tomcat控制台的账号密码&#xff0c;如果账号密码输入正确还是登录不进去&#xff0c;则很有可能是tomcat的账号被锁了&#xff08;可在catalina.xxx.log里面查看&#xff09;。tomcat账号被锁定后默认情况是不访问控制台后5分钟自动解锁&am…

持续集成交付CICD:安装Jenkins Slave(从节点)

目录 一、实验 1.安装Jenkins Slave&#xff08;从节点&#xff09; 二、问题 1.salve节点启动jenkins报错 2.终止命令行后jenkins从节点状态不在线 一、实验 1.安装Jenkins Slave&#xff08;从节点&#xff09; &#xff08;1&#xff09;查看jenkins版本 Version 2.…

Elasticsearch:搜索架构

Elasticsearch 全文检索的复杂性 为了理解为什么全文搜索是一个很难解决的问题&#xff0c;让我们想一个例子。 假设你正在托管一个博客发布网站&#xff0c;其中包含数亿甚至数十亿的博客文章&#xff0c;每个博客文章包含数百个单词&#xff0c;类似于 CSDN。 执行全文搜索…

11月7日 mybatis缓存

mybatis的缓存 缓存的条件&#xff1a;必须要有存在的数据 一级缓存: SqlSession级别缓存.存储的数据.只能在同一个SalSession有效.默认开启 二级缓存: SqlSessionFactory级别的缓存. SqlSessionFactory只有一个的,单例,全局共享的,不同的 SqlSession共享&#xff0c;默认没有…

php多实例

文章目录 安装phpftp扩展查看扩展是否安装成功php-fpm多实例(nginxphp-fpm) 安装php cd /usr/local/src/php-5.6.35/ext/ftp/ /usr/local/php56/bin/phpize ./configure --with-php-config/usr/local/php56/bin/php-config echo $? make echo $? make installftp扩展 vim /…