DataSnap 2009 系列之一 (系统连接篇)

简介: (连接篇)Delphi 的MIDAS出来了这么多年终于有改进的版本了,COM-FREE的DataSnap 2009真是清爽了很多,DataSnap 2009 除了不支持回调和Intercept组件以外 其它的该有的都有了 而且还有很多强大的特性;  第一篇就先写点DataSnap 2009连接方面可能要用到的东西,以后再继续写写关于生命周期的管理 对象池的应用 以及远程管理 远程方法调用等方面的东西吧。

(连接篇)

Delphi 的MIDAS出来了这么多年终于有改进的版本了,COM-FREE的DataSnap 2009真是清爽了很多,DataSnap 2009 除了不支持回调和Intercept组件以外 其它的该有的都有了 而且还有很多强大的特性;

  第一篇就先写点DataSnap 2009连接方面可能要用到的东西,以后再继续写写关于生命周期的管理 对象池的应用 以及远程管理 远程方法调用等方面的东西吧。

  首先 建立个DataSnap 2009的服务器工程,一共用到三个组件:

    DSServer   服务配置组件 用于绑定其它的组件;

  DSServerClass 可以看作是一个类的工厂 用于导出需要远程调用的服务端模块;

  DSTCPServerTransport 传输组件 这里使用的是indy的tcpserver;

   将DSServerClass和DSTCPServerTransport 的Server设置成DSServer就可以了,客户端连接和断开连接时会触发DSServer的两个事件OnConnect和OnDisConnect,参数为 TDSConnectEventObject。

  我们看下该类的定义

TDSConnectEventObject = class(TDSEventObject)  public    constructor Create(const ADbxContext: TDBXContext; const AServer:  TDSCustomServer; const ATransport: TDSServerTransport;   const  AChannelInfo: TDBXChannelInfo; const ADbxConnection: TDBXConnection;  const AConnectProperties: TDBXProperties);  private    FConnectProperties: TDBXProperties;    FChannelInfo: TDBXChannelInfo;  public        property ConnectProperties: TDBXProperties read FConnectProperties  write FConnectProperties;    property ChannelInfo: TDBXChannelInfo read FChannelInfo;  end;

    我们可以看到其中包含了两个属性ConnectProperties ChannelInfo:

    ConnectProperties 包含了客户端连接所传递的参数 Params 也就是一个TStrings的内容;

    ChannelInfo 里面有个很重的属性就是它的ID 其实是TIdTCPConnection对象的ID 所以我们可以直接强制转换成TIdTCPConnection;

  然后建立个DataSnap 2009的客户端工程,由于使用的DbExpress框架客户端连接用的是TSQLConnection组件,只要把Driver设置成Datasnap即可。连接的服务器地址通过HostName和Port来进行设定,下面我们就实现个简单的DEMO 客户端通过用户名和密码连接服务端 如果密码不争取服务端则断开连接。

  客户端主要函数

 procedure TMainForm.ConnectClick(Sender: TObject);  begin    SQLConnection.Params.Values['User_Name'] := UserName.Text;    SQLConnection.Params.Values['PassWord'] := Password.Text;    try      SQLConnection.Open;      Connect.Enabled := False;      DisConnect.Enabled := True;    except      ShowMessage('连接服务器失败!');    end;  end;    procedure TMainForm.DisConnectClick(Sender: TObject);  begin    SQLConnection.Close;    Connect.Enabled := True;    DisConnect.Enabled := False;  end;

服务端主要函数

  procedure TMainForm.DSServerConnect(DSConnectEventObject:  TDSConnectEventObject);  const    SRemoteConnected = '远程客户端连接 %s:%d';    SUserNameAndPassword = '用户名: %s 密码: %s';    SAuthSuccess = '用户名密码认证成功';    SAuthFailed  = '用户名密码认证失败';  var    Conn: TIdTCPConnection;  begin    Conn := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);    LogMessage(Memo, Format(SRemoteConnected,  [Conn.Socket.Binding.PeerIP, Conn.Socket.Binding.PeerPort]));    with DSConnectEventObject.ConnectProperties do    begin      LogMessage(Memo, Format(SUserNameAndPassword,  [Values['User_Name'], Values['PassWord']]));      if (Values['User_Name'] = 'Admin') and (Values['PassWord'] =  '123456') then        LogMessage(Memo, SAuthSuccess)      else      begin        LogMessage(Memo, SAuthFailed);        Conn.Disconnect;      end;    end;  end;    procedure TMainForm.DSServerDisconnect(DSConnectEventObject:  TDSConnectEventObject);  const    SRemoteDisConnected = '远程客户端断开连接 %s:%d';  var    Conn: TIdTCPConnection;  begin    Conn := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);    LogMessage(Memo, Format(SRemoteDisConnected,  [Conn.Socket.Binding.PeerIP, Conn.Socket.Binding.PeerPort]));  end;

注意:OnConnect事件中还可以使用另外一种方式拒绝客户端连接,在代码中抛出个异常即可 在客户端会捕捉到一个TDBXError的异常 显示'Remote error ' 加上异常显示的消息。 

  效果图如下:

相关文章
|
测试技术
西门子S7-200 SMART自由口通信,如何编写发送程序,使用超级终端发送测试
今天我们学习编写西门子S7-200 SMART自由口通信的发送程序,并使用超级终端进行发送功能测试。首先设置参数,打开STEP7 Micro/WIN SMART编程软件,右键单击项目树中的CPU,选择打开,在打开的系统块中选择CPU类型和信号板类型。设置信号板,串口的类型为RS232,地址为2,波特率为9600。
西门子S7-200 SMART自由口通信,如何编写发送程序,使用超级终端发送测试
|
9月前
|
移动开发 缓存 安全
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
本文探索了在Linux环境下实现WebSocket服务器的网络设计,将WebSocket服务器作为连接世界的纽带,为读者介绍了如何掌握Linux网络设计中的关键技术。文章从实现WebSocket协议到优化服务器性能和稳定性等方面进行了深入讲解。通过学习本文,读者将能够全面了解WebSocket服务器的原理和工作机制,并获得构建高效、可靠的Linux WebSocket服务器的实用技巧和最佳实践。无论是初学者还是有经验的开发人员,都能从本文中获得宝贵的知识和启发,进一步提升在Linux网络设计中的能力。让我们一同打造连接世界的纽带,掌握Linux网络设计中WebSocket服务器的精髓。
131 0
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
|
存储 监控 网络协议
分享自己平时使用的socket多客户端通信的代码技术点和软件使用
分享自己平时使用的socket多客户端通信的代码技术点和软件使用
213 2
分享自己平时使用的socket多客户端通信的代码技术点和软件使用
|
uml C++
MFC通讯系统项目(未完成)
MFC通讯系统项目(未完成)
107 0
MFC通讯系统项目(未完成)
台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯
台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯
台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯