Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口

转载 2011年01月11日 15:24:00

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。

在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果奉献给大家,免得大家在花时间研究这个。

另外,通过研究发现,DSConnectEventObject.ChannelInfo.Id 属性实际上是内存地址,并不是一个简单的数字。

 

以下代码红色部分是关键。

uses IdTCPConnection;

......

procedure TServerContainer1.DSServer1Connect
  (DSConnectEventObject: TDSConnectEventObject);
var
  ClientConnection: TIdTCPConnection;
begin
  with Form1 do
  begin
    dsShowDataSet.Append;
    dsShowDataSet['ClientConnectTime'] := Now;

    if DSConnectEventObject.ChannelInfo <> nil then
    begin
      ClientConnection := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);

      dsShowDataSet['ClientID'] := DSConnectEventObject.ChannelInfo.Id;
      dsShowDataSet['ClientIP'] := ClientConnection.Socket.Binding.PeerIP +
        ':' + IntToStr(ClientConnection.Socket.Binding.PeerPort);
      dsShowDataSet['ServerIP'] := ClientConnection.Socket.Binding.IP + ':' +
        IntToStr(ClientConnection.Socket.Binding.Port);
    end;

    dsShowDataSet['ClientUserName'] := DSConnectEventObject.ConnectProperties
      [TDBXPropertyNames.UserName];
    dsShowDataSet['ClientUserPassword'] :=
      DSConnectEventObject.ConnectProperties[TDBXPropertyNames.Password];
    dsShowDataSet['ServerInfo'] := DSConnectEventObject.ConnectProperties
      [TDBXPropertyNames.ServerConnection];
    dsShowDataSet.Post;
  end;
end;


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunstone/archive/2009/12/12/4990189.aspx

Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法

这几天继续研究DataSnap技术。针对服务器和客户端软件,如何发布呢?经过研究发现,分发方法非常简单! 服务器发布方法:1.在unit ServerMethodsUnit1单元中,添加uses Mi...
  • sunstone
  • sunstone
  • 2009年12月09日 11:14
  • 7670

Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。 在de...
  • sunstone
  • sunstone
  • 2009年12月12日 10:03
  • 7221

Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

Lifecycle 三种属性: Session、Invocation、Server这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明。如果乱用这三种属性,你的服务程序有可能崩...
  • sunstone
  • sunstone
  • 2010年02月02日 21:11
  • 5481

Delphi2010开发DataSnap服务器(一)

今天简单的研究了一下Delphi开发DataSnap服务器,以下是简单的例子,各位见笑了。 第一步创建一个DataSnap Server 这里选择默认 选择好了以后这里生成3个文件,我将...
  • qwe515800
  • qwe515800
  • 2016年12月04日 16:13
  • 623

DataSnap服务器方法返回TClientDataSet的简易实现

DataSnap服务器方法不能直接返回TClientDataSet类实例,因为DataSnap不支持把TClientDataSet转化JSON对象,但是,DataSnap支持对TDBXReader的解...
  • ddqqyy
  • ddqqyy
  • 2011年11月17日 15:49
  • 7129

Delphi2010中DataSnap高级技术

http://blog.csdn.net/leonkin/article/details/6051969 1)—为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的...
  • ksrsoft
  • ksrsoft
  • 2013年11月07日 17:04
  • 1199

DataSnap服务器如何得到客户端的IP和端口

datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果奉献给大家,免得大家在花时间...
  • slhfine
  • slhfine
  • 2015年06月12日 17:46
  • 718

Delphi XE10 开发DataSnap服务端驱动问题解决

 用XE10开发DataSnap服务端程序时,不管是用DBXEXPress还是FireDAC连接服务器数据库时经常出现驱动错误警示,通过摸索终于找到了解决问题的办法。 由于我们经常在win7(...
  • superpower77
  • superpower77
  • 2017年12月28日 15:23
  • 67

Delphi2010中DataSnap技术网摘

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。   在...
  • xieyunc
  • xieyunc
  • 2015年08月22日 22:20
  • 1044

Delphi 的一个加密和压缩组件 (用于DataSnap多层程序中)

DSFC -- DataSanp过滤和压缩系列,由九个过滤器组成,是为Delphi2010版定制的。过滤器分下面三组:HASH¶MD5 MD4 SHA1 SHA512 CIPHER¶Blowfish ...
  • busintel
  • busintel
  • 2010年11月04日 12:57
  • 2763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
举报原因:
原因补充:

(最多只允许输入30个字)