DIOCP之编写第一个应用程序(三)

Client

设计功能如下:

1、建立与服务器连接

2、请求连接时,加密密码,采用Base64编码

3、时时发送心跳告诉服务器在线

4、进行相关的数据处理与交互

第一步:创建一个VCL-Forms Application(创建一个标准VCL程序)

第二步:编写一个公共单元用于与Server通讯,因为客户端一般由多个窗体组成,所以需要一个公共连接类,不能放入窗体,不然窗体关闭,这个连接也会被关闭

以下单元是彩蛋的单元,我简化了,保留部分,用于学习,这个部分主要是向服务器发送请求

unit ClientIocpOper;

interface

uses
Classes,

diocp_coder_tcpClient,//与服务器进行通讯必要单元,当然你用indy来编写客户端就不需要此单元

SimpleMsgPack,//包处理单元

uDIOCPStreamCoder;//编码器与解码器的单元

/// <summary>
/// 请求登录
/// </summary>
/// <param name="AUserID">账号</param>
/// <param name="APaw">密码</param>
procedure CMD_Login(const AUserID, APaw: string);

/// <summary>

/// 初始化客户端使用的对象
/// </summary>
procedure IniClientObject;

/// <summary>
/// 销毁客户端创建的对象
/// </summary>
procedure UnIniClientObject;

var
CurUserID: string;//全局变量
CoderTcpClient: TDiocpCoderTcpClient;//全局通讯client
DiocpContext: TIocpCoderRemoteContext;//全局通讯DiocpContext
implementation

uses SysUtils;

var
CMDObject: TSimpleMsgPack;
CMDStream: TMemoryStream;

procedure SendCMDObject(pvCMDObject: TSimpleMsgPack);
var
lvCMDStream:TMemoryStream;
begin
lvCMDStream := TMemoryStream.Create;
try
pvCMDObject.EncodeToStream(lvCMDStream); // 加密消息
DiocpContext.WriteObject(lvCMDStream);
finally
lvCMDStream.Free;
end;
end;

procedure CMD_Login(const AUserID, APaw: string);
begin
// 连接
CoderTcpClient.open;
if DiocpContext.Active then Exit;
DiocpContext.Connect;
//sfLogger.logMessage(‘与服务器建立连接成功, 请进行登陆‘);
// 上线
if DiocpContext.Active then // 连接成功,请求登陆
begin
CMDObject.Clear;
CMDObject.ForcePathObject(‘cmdIndex‘).AsInteger := 11;
CMDObject.ForcePathObject(‘requestID‘).AsString := ‘login‘;
CMDObject.ForcePathObject(‘user.id‘).AsString := AUserID;
CMDObject.ForcePathObject(‘user.paw‘).AsString := APaw;
SendCMDObject(CMDObject);
end;
end;

procedure CMD_KeepAlive;
begin
CMDObject.Clear;
CMDObject.ForcePathObject(‘cmdIndex‘).AsInteger := 0;
SendCMDObject(CMDObject);
end;

procedure IniClientObject;
begin
CoderTcpClient := TDiocpCoderTcpClient.Create(nil);

DiocpContext := TIocpCoderRemoteContext(CoderTcpClient.Add);
DiocpContext.RegisterCoderClass(TIOCPStreamDecoder, TIOCPStreamEncoder);

CMDObject := TSimpleMsgPack.Create;
CMDStream := TMemoryStream.Create;
end;

procedure UnIniClientObject;
begin
FreeAndNil(CMDObject);
CoderTcpClient.DisconnectAll;
CoderTcpClient.Free;
CMDStream.Free;
end;

initialization
IniClientObject;

finalization
UnIniClientObject;

end.

第四步:编写接收服务器数据,并更新客户端界面的组件

此部分要,在要建立起与tcpclient接收受数据的关联事件

procedure OnContextActionEx(AObject: TObject);

在窗体creat事件中,

DiocpContext.OnContextAction := OnContextActionEx; // 客户端上下文事件
DiocpContext.OnDisconnectedEvent := OnDisConnected;

然后就可以在OnContextActionEx处理来自服务器的数据,操作界面时注意“创建UI同步临界区对象”,即数据更新界面,防假死

时间: 2024-08-04 10:17:15

DIOCP之编写第一个应用程序(三)的相关文章

DIOCP之编写第一个应用程序(一)

Server 设计功能如下: 1.支持客户端登录 2.连接数据库进行操作 3.推送信息 4.限制文件上传大小 第一步:创建一个VCL-Forms Application(创建一个标准VCL程序) 第二步:引用必要的单元文件:diocp_coder_tcpServer, diocp_tcp_server,  SimpleMsgPack,uMyClientContext(uMyClientContext为扩展clientcontext,自己编写),uDIOCPStreamCoder(引用编码器与解码

DIOCP之编写第一个应用程序(二)

构建client界面: 构建界面要比写代码更难爱,不是专业UI设计太丑,先有个界面,好写代码,客户端代码与界面设计思想:界面与数据之间分离处理,不能要接收数据的地方写代码,不然以后修改程序会死人的.

Xamarin iOS编写第一个应用程序创建工程

Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的创建以及编写代码等内容XamariniOS编写第一个应用程序创建工程本文选自Xamarin iOS开发实战大学霸. 1.3.1  创建工程 XamariniOS编写第一个应用程序创建工程本文选自Xamarin iOS开发实战大学霸,很多的开发工具,在编写代码之前,都必须要创建一个工程,如Visual

【DirectX11-Tutorial】编写第一个窗口程序creating a window

本系列主要参考此博客的文章l,同时会加上一点个人实践过程. ========================================== 分割线 ========================================== 这篇文章主要分为三个部分,首先是看一下创建窗口完整的代码,然后了解程序运作的主要细节,最后如何修改这些代码. 接下来开始第一个窗口程序,上一个程序中使用WinMain()函数开始整个程序,这一次将结合另一个函数WinProc(),这个函数将处理程序每一个系统运

微信小程序-----安装,编写第一个小程序和运行到手机端

第一步: 微信公众平台注册账号,并选择小程序,网址:mp.weixin.qq.com 填写相关信息,如:主体类型(个人或者企业) AppID  在开发中都是用的到的,服务器域名在网络请求也是用的到的. 完成信息之后,下载开发工具: 下载地址: https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html 选择自己需要的版本,下载直接安装,和平常的软件安装一样,直接运行 用微信扫码登录即可,然后点击添加项目, 输入申请的AppID

编写第一个裸机程序

一. ARM裸机之Makefile 1.1. Makefile 分析 led.bin: led.o arm-linux-ld -Ttext 0x0 -o led.elf $^ arm-linux-objcopy -O binary led.elf led.bin arm-linux-objdump -D led.elf > led_elf.dis gcc mkv210_image.c -o mkx210 ./mkx210 led.bin 210.bin %.o : %.S arm-linux-g

java自学第一课:安装jdk,写第一条java程序

一.安装jdk 二.写第一条java程序 三.认识jdk JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库. JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 jdb – debugger,查错工具 java – 运行编译后的java程序(.class后缀的) appletviewer:小程序浏览器,一种执行HTML文件上的Java

第一个单片机程序(C言语编写)

忙活了半天,预备任务做了那么多,终于要编写我们的程序代码了.假如学过 C 言语的话,你应当很轻松的跟着我的编程本人写出来,假如没学过 C 言语也没紧要,你先照着我的抄,我会在适宜的地位写出来对 C 言语语法的说明,如许抄几回后再看看说明,就应当很明确了,抄的时分必定要仔细,特别标点符号弗成以搞错.第一个单片机程序: #include <reg52.h> //包括特别功用存放器界说的头文件 sbit LED = P0^0; //位地址声明,留意:sbit 必需小写.P 大写! void main

SharePoint使用BCS开发你第一个应用程序(三)

SharePoint使用BCS开发你第一个应用程序(三) 创建外部内容类型. 创建外部内容类型有三种不同方式: 1. 在记事本上手写XML代码(不推荐). 2. 使用SharePoint Designer 2010 创建(推荐). 3. 使用VS(需要有丰富的编程经验). 如果你使用SharePoint Designer创建外部内容类型,它自动保存XML元数据到BDC业务数据连接元数据仓库中并在管理中心呈现出来.VS为BDC元数据项目创建标准WSP,这样XML元数据文件被部署到正确的位置.如果你