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

    技术2024-09-29  67

    作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端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;

    最新回复(0)