您的位置:首页 > 理论基础 > 计算机网络

用委托的方法调用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分别建立三个方法,例:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: