用委托的方法调用TCP通讯指令列表
2011-07-17 16:11
225 查看
需求: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分别建立三个方法,例:
例如要建立一个调用任务列表,可以按如下代码:
在通讯的解析程序中,监测到数据已经完整接收,并且已经解析,则可以调用下一个任务,执行如下代码即可
由于没有写测试代码,是项目中使用,因此没有拿出整个程序,这部分代码已经是完整的了。关键在于建立和调用,也就是
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);
本文出自 “cnming” 博客,请务必保留此出处http://cnming.blog.51cto.com/324450/614596
假设通讯指令涉及如下三个指令:
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);
本文出自 “cnming” 博客,请务必保留此出处http://cnming.blog.51cto.com/324450/614596
相关文章推荐
- 根据类中方法名列表循环调用方法
- 方法调用方法的委托小例子
- controller 和 指令 通讯方法
- Python采用socket模拟TCP通讯的实现方法
- #中调用委托的简单方法
- 解决dedecms文章列表中调用中文星期几的解决方法
- jquery事件委托的回调函数中调用全局变量的简单方法
- jquery事件委托的回调函数中调用全局变量的简单方法
- DEDE在列表调用当前栏目的文章总数的修改方法
- .net知识和学习方法系列(十)委托异步调用方法b
- c#匿名方法调用委托
- tcp/ip网络通讯安全加密方法
- 转,委托和多路委托(即会调用多个方法)
- 使用反射、泛型和委托,动态调用对象的属性和方法——性能和灵活性兼备的方法
- C#多线程实现方法——异步委托/调用
- 反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)
- jquery事件委托的回调函数中调用全局变量的简单方法
- 委托之异步调用 、抽象方法、策略模式、接口
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)