用委托的方法调用TCP通讯指令列表
需求:TCP通讯中客户端与服务端交互会有若干中指令,例如完成一个客户度登录过程,必须先建立握手连接,然后登录,假设服务端规定这个过程中,握手连接必须先建立起来,然后才能登录,不得越级。如何让程序顺序执行?
假设通讯指令涉及如下三个指令:
Send_ConnectToServer、Send_ClientSayHello、Send_Login
使用委托的方法,首先建立委托,参数就用实体类传入,这样比较简单,假设实体类
MessageEntity
申明委托:
public delegate string ProcessDelegate(Costaco.Mid.HPInterface.MessageEntity pEntity);
申明任务列表:
public ProcessDelegate [] mProcess;
public int mProcessIndex = 0;\\任务执行的索引
对Send_ConnectToServer、Send_ClientSayHello、Send_Login分别建立三个方法,例:
- private string Send_ConnectToServer(MessageEntity pEntity)
- {
- if (mTcpCli.IsConnected == false) //mTcpCli是我建立的异步通讯Class
- {
- mTcpCli.Connect(this.txtIP.Text.Trim(), Convert.ToInt32(this.txtPort.Text));
- mTcpCli.Send(new byte[] { });
- }
- mProcessIndex = mProcessIndex + 1;
- return "";
- }
例如要建立一个调用任务列表,可以按如下代码:
- mProcess = new ProcessDelegate[3];
- mProcess[0] = new ProcessDelegate(Send_ConnectToServer);
- mProcess[1] = new ProcessDelegate(Send_ClientSayHello);
- mProcess[2] = new ProcessDelegate(Send_hs_validate);
- mProcessIndex = 0;
- #region 调用任务列表中的第一个任务
- if (mProcessIndex < mProcess.Length)
- {
- mProcess[mProcessIndex].Invoke(mEntity);
- }
- #endregion 调用任务列表中的第一个任务
在通讯的解析程序中,监测到数据已经完整接收,并且已经解析,则可以调用下一个任务,执行如下代码即可
- #region 调用任务列表中的其它任务
- if (mProcessIndex < mProcess.Length)
- {
- mProcess[mProcessIndex].Invoke(mEntity);
- }
- #endregion 调用任务列表中的其它任务
由于没有写测试代码,是项目中使用,因此没有拿出整个程序,这部分代码已经是完整的了。关键在于建立和调用,也就是
mProcess = new ProcessDelegate[3];
mProcess[0] = new ProcessDelegate(Send_ConnectToServer);
mProcess[1] = new ProcessDelegate(Send_ClientSayHello);
mProcess[2] = new ProcessDelegate(Send_hs_validate);
和
mProcess[mProcessIndex].Invoke(mEntity);
转载于:https://blog.51cto.com/cnming/614596
用委托的方法调用TCP通讯指令列表相关推荐
- 【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 批量方法委托 )
文章目录 一.批量方法委托 二.完整代码示例 一.批量方法委托 在上一篇博客 [Groovy]MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 ) 中 , 将 ...
- 西门子PLC S7-1500系列CPU与西门子PLC S7-300系列的通讯模块CP343-1进行TCP通讯的方法
西门子PLC S7-1500系列是西门子新一代PLC产品,它通过多方面的创新,为用户提供了更高性价比的产品,提高了用户的工程实施效率.西门子PLC S7-1500为用户在自动化控制系统中提供了更高的运 ...
- boost asio 异步实现tcp通讯
一.前言 boost asio可算是一个简单易用,功能又强大可跨平台的C++通讯库,效率也表现的不错,linux环境是epoll实现的,而windows环境是iocp实现的.而tcp通讯是项目当中经常 ...
- 系统间通信2:通信管理与远程方法调用RMI
本文引用 : https://yinwj.blog.csdn.net/article/details/49120813 RMI : Remote Method Invocation,远程方法调用 RP ...
- activeMQ的源码分析 -TCP通讯机制
2019独角兽企业重金招聘Python工程师标准>>> activeMQ的源码分析 -TCP通讯机制 博客分类: MQ <IGNORE_JS_OP style="WO ...
- 《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)
基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册.用户登录.实时聊天,文件上传与下载) 用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用 目录 基于Python与T ...
- Python中UDP/TCP通讯简单案例
python使用udp协议要通过socket技术: 1.引包 2.创建流对象(ipv4, udp) 3.发送(二进制字符串, 元组ip和端口) 4.关闭流对象 socket: 译为:套接字/流对象 网 ...
- 高效能TCP通讯基础组件Beetle.Express
Beetle.Express是Beetle相应的免费版Tcp通讯组件,Beetle.Express提供基础的TCP通讯封装,虽然只具备了基础功能,但在TCP吞吐上有着和Beetle一样出色的性能.组件 ...
- C#编码实践:使用委托和特性调用指定函数
2019独角兽企业重金招聘Python工程师标准>>> 建立一个C#控制台应用程序AttributeTest. 建立一个类Operations,代码如下: namespace Att ...
最新文章
- php 6.0新特性,新版特性 | 序言 | Laravel 6 中文文档
- go gin 第二次使用ShouldBindJSON失效的原因及解决办法:使用ShouldBindBodyWith代替
- 【最长公共前缀】算法优化笔记
- 为什么使用%lf读取double型的值,而用%f进行显示?
- linux Kernel Map
- biee mysql,Linux环境中使用BIEE 连接SQLServer业务数据源的简单示例
- 计算机英语 mp3,计算机英语会话(MP3+中英字幕) 第21期:操作系统(5)
- 解决KEIL MDK编译生成Bin文件时,却生成了*bin文件夹
- Kingdom Rush 国王保卫战图文攻略
- 计算机改显存会有啥影响,显卡内存越大越好吗?显存对计算机速度(全文)的影响...
- wps在线编辑梳理(此处整理了对接过后容易出错的地方)
- 导出RK3288开发板上的根文件系统,并打包img
- 标识(志)符的概念与规则
- 2022-2027年中国农村小额贷款行业市场调研及未来发展趋势预测报告
- 《动态规划》— 动态规划分类
- MySQL数据库常见错误与解决方法总结
- 对那些家庭经济特别艰难的学生
- ENVI去除影像的地理坐标信息
- 中国志愿者服务器注册,全国志愿服务信息系统操作指南二(志愿者注册)
- 采用策略分布曲线评估信用风险模型的效果
热门文章
- 大厂面试算法系列-如何从无序链表中移除重复项(一)-顺序删除
- Hadoop入门基础教程 Hadoop之服务器基础环境搭建
- mysql单实例多数据库_Mysql单实例数据库的安装
- 两片74161实现60进制_74ls161集成60进制加法计数 - 74LS161集成计数器电路(2、3、4、6、8、10、60进制计数器)...
- ConcurrentProgramming:interrupt
- Security中常见的权限控制方式
- datax实现mysql数据同步
- 如何优雅地编写Java
- saltstack案例 自助机
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实现字典的打印...