TCP服务器主动断开客户端

自定义消息函数

afx_msg LRESULT CbaseMFCprojectDlg::OnOnsocketbartender(WPARAM wParam, LPARAM lParam)
WPARAM wParam:消息来源
res = recv(wParam, cs, 65535, 0);获取这个客户端端口socket通道里面的信息长度为65535存放在cs里面
如果获取得到res==0即是说明该客户端已经断开了与服务器的连接,服务器需要主动关闭此连接
closesocket(wParam);关闭这一消息通道的函数

afx_msg LRESULT CbaseMFCprojectDlg::OnOnsocketbartender(WPARAM wParam, LPARAM lParam)
{CString str("");char cs[65535] = "";char cs2[65535] = "";char cs3[65535] = "";char cs4[65535] = "";char cs5[65535] = "";char cs6[65535] = "";char cs7[65535] = "";char cs8[65535] = "";char cs9[65535] = "";char cs10[65535] = "";//char cs11[65535] = "";//char cs12[65535] = "";//char cs13[65535] = "";//char cs14[65535] = "";//char cs15[65535] = "";//char cs16[65535] = "";//char cs17[65535] = "";//char cs18[65535] = "";//char cs19[65535] = "";//char cs20[65535] = "";switch (lParam){case FD_ACCEPT://连接请求{int length = sizeof(m_addrServerBack_Bartender);//接收客户端的请求m_ServerSocketBack_Bartender = accept(m_ServerSocket_Bartender, (sockaddr*)&m_addrServerBack_Bartender, &length);m_wParamsBartender.emplace_back(m_ServerSocketBack_Bartender);SetTimer(2, 2000, NULL);}break;case FD_READ://发送数据请求{//CString num = "";CString num("");CString num2("");CString num3("");CString num4("");CString num5("");//CString num6("");//CString num7("");//CString num8("");//CString num9("");CString num10("");//CString num11("");//CString num12("");//CString num13("");//CString num14("");//CString num15("");//CString num16("");//CString num17("");//CString num18("");//CString num19("");//CString num20("");//CString temp;//temp = m_recvupcomputer;int res;res = recv(wParam, cs, 65535, 0);//最大读取int类型65535长度的内容res = recv(wParam, cs2, 65535, 0);//res返回为0表示客户端已经断开连接,为大于1的数则表示成功读取,为-1则表示有连接但读取失败res = recv(wParam, cs3, 65535, 0);res = recv(wParam, cs4, 65535, 0);res = recv(wParam, cs5, 65535, 0);//res = recv(wParam, cs6, 65535, 0);//res = recv(wParam, cs7, 65535, 0);//res = recv(wParam, cs8, 65535, 0);//res = recv(wParam, cs9, 65535, 0);res = recv(wParam, cs10, 65535, 0);//res = recv(wParam, cs11, 65535, 0);//res = recv(wParam, cs12, 65535, 0);//res = recv(wParam, cs13, 65535, 0);//res = recv(wParam, cs14, 65535, 0);//res = recv(wParam, cs15, 65535, 0);//res = recv(wParam, cs16, 65535, 0);//res = recv(wParam, cs17, 65535, 0);//res = recv(wParam, cs18, 65535, 0);//res = recv(wParam, cs19, 65535, 0);//res = recv(wParam, cs20, 65535, 0);num = cs;num2 = cs2;num3 = cs3;num4 = cs4;num5 = cs5;//num6 = cs6;//num7 = cs7;//num8 = cs8;//num9 = cs9;num10 = cs10;//num11 = cs11;//num12 = cs12;//num13 = cs13;//num14 = cs14;//num15 = cs15;//num16 = cs16;//num17 = cs17;//num18 = cs18;//num19 = cs19;//num20 = cs20;if (res == 0 && num.GetLength() == 0) {closesocket(wParam);//客户端已经断开连接,服务器这边需要释放掉这个客户端writeShowLog2(_T("bartender正常断开"));writeErrorLog("bartender正常断开");//if (m_recvzpls.size() == m_parameters_fileds[0].at("connom_tagnum").ivalue * 2) {//	::PostMessage(theMainDlg->m_hWnd, WM_SOCKET_CLIENT_PLC, 0, 2);//激活自发打印事件//}if (m_printResultSend > 0) {KillTimer(4);m_printResultSend = 0;JsonmesSend jms;jms.code = "0";jms.mcuIndex = "1";jms.businessType = "printResult";std::string bostr = "";jms.bo = bostr;MesServerSend(jms);}for (int i = 0; i < m_wParamsBartender.size(); i++) {if (wParam == m_wParamsBartender[i]) {m_wParamsBartender.erase(m_wParamsBartender.begin() + i);//在vector中erase掉这个客户端break;}}break;if (m_wParamsBartender.size() <= 0) {KillTimer(2);}}CString stateStr;//CString recv;stateStr.Format(_T("收到Bartender%s"), num);//recv += num;//m_recvupcomputer = temp;m_recvBartender += num;if (num2.GetLength() > 0) {m_recvBartender += num2;stateStr += num2;}if (num3.GetLength() > 0) {m_recvBartender += num3;stateStr += num3;}if (num4.GetLength() > 0) {m_recvBartender += num4;stateStr += num4;}if (num5.GetLength() > 0) {m_recvBartender += num5;stateStr += num5;}//if (num6.GetLength() > 0) {//	m_recvBartender += num6;//	stateStr += num6;//}//if (num7.GetLength() > 0) {//	m_recvBartender += num7;//	stateStr += num7;//}//if (num8.GetLength() > 0) {//	m_recvBartender += num8;//	stateStr += num8;//}//if (num9.GetLength() > 0) {//	m_recvBartender += num9;//	stateStr += num9;//}if (num10.GetLength() > 0) {m_recvBartender += num10;stateStr += num10;if (num10.GetLength() > 60000) {writeShowLog(_T("传输过长请处理,bartender"));writeErrorLog("传输过长请处理,bartender");}}//if (num20.GetLength() > 0) {//	m_recvBartender += num20;//	stateStr += num20;//	if (num20.GetLength() > 60000) {//		writeShowLog(_T("传输过长请处理,bartender"));//		writeErrorLog("传输过长请处理,bartender");//	}//}//{"number":-1}//if (m_upcomputerstatus == 0) {if (num.GetLength() > 0) {//说明有接收长度std::string log = (CW2A)stateStr;writeErrorLog(log);CString findstart2, findend2;findstart2 = _T("^XA");findend2 = _T("^XZ");//重新寻找重定位s2,e2int s2 = m_recvBartender.Find(findstart2);int e2 = m_recvBartender.Find(findend2);if (s2 >= 0) {//closesocket(m_ServerSocketBack_Bartender);//m_wParam = wParam;//SetTimer(2, 2000, NULL);m_upcomputerstatus = 2;if (e2 > 0) {m_upcomputerstatus = 0;CString recvzpl;recvzpl = m_recvBartender.Mid(s2, e2 - s2 + findend2.GetLength());m_recvzpls.emplace_back(recvzpl);m_recvBartender = m_recvBartender.Right(m_recvBartender.GetLength() - e2 - findend2.GetLength());//重新寻找重定位s2,e2s2 = m_recvBartender.Find(findstart2);e2 = m_recvBartender.Find(findend2);while (s2 >= 0) {if (e2 < 0) {break;}recvzpl = m_recvBartender.Mid(s2, e2 - s2 + findend2.GetLength());m_recvzpls.emplace_back(recvzpl);m_recvBartender = m_recvBartender.Right(m_recvBartender.GetLength() - e2 - findend2.GetLength());//重新寻找重定位s2,e2s2 = m_recvBartender.Find(findstart2);e2 = m_recvBartender.Find(findend2);};if (s2 < 0) {m_recvBartender = m_recvBartender.Right(m_recvBartender.GetLength() < findstart2.GetLength() ? m_recvBartender.GetLength() : findstart2.GetLength());}//if (m_recvzpls.size() == m_parameters_fileds[0].at("connom_tagnum").ivalue * 2) {if (m_recvzpls.size() > 0) {if (m_printerSendTimes == 0) {::PostMessage(theMainDlg->m_hWnd, WM_SOCKET_CLIENT_PLC, 0, 2);//激活自发打印事件}}if (m_recvzpls.size() == m_parameters_fileds[0].at("connom_tagnum").ivalue * 2) {//if (m_recvzpls.size() >0) {{closesocket(wParam);//完整接受zpl自动断开连接,服务器这边需要释放掉这个客户端writeShowLog2(_T("bartender正常自动断开"));writeErrorLog("bartender正常自动断开");if (m_printResultSend > 0) {KillTimer(4);m_printResultSend = 0;JsonmesSend jms;jms.code = "0";jms.mcuIndex = "1";jms.businessType = "printResult";std::string bostr = "";jms.bo = bostr;MesServerSend(jms);}for (int i = 0; i < m_wParamsBartender.size(); i++) {if (wParam == m_wParamsBartender[i]) {m_wParamsBartender.erase(m_wParamsBartender.begin() + i);//在vector中erase掉这个客户端break;}}break;if (m_wParamsBartender.size() <= 0) {KillTimer(2);}}}else if (m_recvzpls.size() > m_parameters_fileds[0].at("connom_tagnum").ivalue * 2) {writeShowLog2(_T("bartenderZPL超限"));writeErrorLog("bartenderZPL超限");}}}else {if (e2 >= 0) {writeShowLog2(_T("zpl错误"));m_recvBartender = _T("");}}CString show;show.Format(_T("zpl个数:%d"), m_recvzpls.size());writeShowLog2(show);log = (CW2A)show;writeErrorLog(log);}}break;}return 0;
}

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

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

相关文章

鱼哥好书分享活动第28期:看完这篇《终端安全运营》终端安全企业基石,为你的终端安全保驾护航!

鱼哥好书分享活动第28期&#xff1a;看完这篇《终端安全运营》终端安全企业基石&#xff0c;为你的终端安全保驾护航&#xff01; 读者对象&#xff1a;主要内容&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 在当前网络威胁日益复杂化的背景下&#xff…

linux nginx 命令记录,和转发

nginx: 查看配置文件&#xff1a;sudo find / -name nginx.conf 配置文件&#xff1a;/etc/nginx/nginx.conf 检查nginx.conf文件正确性 nginx -t -c /path/to/nginx.conf 或者 有nginx命令执行 nginx -t 查找nginx 可执行文件&#xff1a;which nginx /usr/sbin/nginx 安装Ng…

Android 支持的媒体格式,(一)音频支持格式

音频支持格式&#xff1a; 格式编码器解码器具体说明文件类型 容器格式AAC LC是是支持单声道/立体声/5.0/5.1 内容&#xff0c;标准采样率为 8-48 kHz。• 3GPP (.3gp) • MPEG-4&#xff08;.mp4、.m4a&#xff09; • ADTS 原始 AAC&#xff08;.aac&#xff0c;在 Android …

游戏UI设计大师课:3款游戏 UI 设计模板

很多时候&#xff0c;做设计需要找素材。假如是普通的 UI 界面或者 Banner 等等&#xff0c;在Dribbble、Pinterest、即时设计、Behance 翻看这样的网站&#xff0c;至少可以梳理出一些想法和思路。如果你需要一个更规范的指南&#xff0c;此时&#xff0c;在各种设计规范、官方…

.Net 检验信息采集及管理系统LIS,成熟的医院实验室管理系统源码

检验管理系统LIS实现了检验信息电子化、检验信息管理自动化&#xff0c;具备与医嘱双向沟通、采用条码管理手段、财务自动计费、仪器双向控制等重要功能特点。其工作流程为通过门诊医生和住院工作站提出检验申请&#xff0c;生成相应患者的化验条码标签&#xff0c;在生成化验单…

根据题意写出完整的css,html和js代码【购物车模块页面及功能实现】

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述 根据题意写出完…

从煎饼摊到便利店,如何理解公司的商业价值 - 《进阶吧!投资者4》读后感

投资逻辑永远要遵循最基本的商业逻辑。要搞清楚两个最基本问题&#xff0c;认知一家企业最基本的要素是什么&#xff1b;盈利的本质是什么。 评估公司的商业价值 要评估企业的估值&#xff0c;我们可以在战术上用资产未来可以产生现金流的折现来评估资产的价值&#xff0c;如果…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 亲子游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

Linux_权限3

Linux所对应的文件类型 1.在Win下&#xff0c;有文件类型&#xff0c;通常通过后缀标识 日常用的就是windows系统这里不做举例. 2.Linux的文件类型不通过后缀区分&#xff08;不代表Linux不用后缀) 其中需要注意的是第一个字符表示文件类型的含义 - :普通文件, 文本, 源代码…

2000-2022年上市公司党建情况:企业设立党组织数据概览

上市公司党建企业设立党组织数据&#xff1a;解析企业党组织建设的关键指标 上市公司企业党组织是党在企业中的基层组织&#xff0c;根据企业中党员的数量&#xff0c;经过上级党组织的批准&#xff0c;可以设立不同级别的党组织。这些党组织在企业中发挥着重要的政治核心作用…

Nginx核心功能(反向代理/负载均衡/动静分离)和搭建HA高可用

1. nginx的核心功能 1.1 nginx反向代理功能 正向代理 代理的为客户端&#xff0c;对于服务器不知道真实客户的信息。例如:翻墙软件。 反向代理 反向代理&#xff08;Reverse Proxy&#xff09;是一种服务器配置&#xff0c;它位于客户端和服务器之间&#xff0c;充当客户端请…

开源数据结构存储系统Redis的内部数据结构详解(上)

目录 1、简单动态字符串 1.1、SDS的定义 1.2、SDS与C字符串的区别 2、链表 2.1、链表的定义 2.2、特性 3、字典 3.1、哈希表定义 3.2、哈希表节点定义 3.3、字典定义 3.4、Rehash 3.5、渐进式rehash 4、总结 C++软件异常排查从入门到精通系列教程(专栏文章列表,…

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员&#xff0c;对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性&#xff1a;public&#xff08;公有的&…

33.【C语言】实践扫雷游戏

预备知识&#xff1a; 第13篇 一维数组 第13.5篇 二维数组 第28篇 库函数 第29篇 自定义函数 第30篇 函数补充 0x1游戏的运行&#xff1a; 1.随机布置雷 2.排雷 基本规则&#xff1a; 点开一个格子后&#xff0c;显示1&#xff0c;对于9*9&#xff0c;代表以1为中心的去…

SpringBoot连接Redis

SpringBoot连接Redis 一、前言1. 添加 Redis 相关依赖2. 配置 Redis 连接信息3. 使用 RedisTemplate 进行操作4. 使用 RedisRepository 进行操作&#xff08;可选&#xff09;5. 启动应用程序6. 测试 一、前言 连接 Redis 到 Spring Boot 可以通过以下步骤完成&#xff1a; 1…

【五】架构设计之思考路线

架构设计之思考路线 概述 看过不少本架构设计方面的书籍&#xff0c;如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业IT架构转型之道》《从程序员到架构师》等&#xff0c;看完之后最终发现架构设计思维大同小异&#xff0c;无非都是围绕实现三高&…

【总结】前端JQuery获取Java后端文件流实现常规附件预览功能

前端JQuery获取Java后端文件流实现常规附件预览功能 项目背景1. Java后端处理附件1.1 将word文档转换为pdf格式1.2 将文件流返回前端 2. 前端处理附件预览&#xff08;JQuery&#xff09;2.1 预览pdf文件2.2 预览ofd文件2.3 预览图片、txt文档 共勉。 项目背景 目前维护的项目…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…

Windows下Pytorch入门深度学习环境安装与配置(CPU版本)

Windows下Pytorch入门深度学习环境安装与配置&#xff08;CPU版本&#xff09; 一、安装过程中各个软件的作用&#xff08;一&#xff09;Python&#xff08;二&#xff09;库 / 包 / package / library&#xff08;三&#xff09;PyTorch / Tensorflow&#xff08;四&#xff…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范&#xff1a; post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名&#xff1a;大驼峰方法名&#xff1a;小驼峰成员变量、局部变量&#xff1a;小驼峰测试方法名&#xff1a;蛇形命名 下划…