zoukankan      html  css  js  c++  java
  • datasnap 2010 DataSnap服务器如何得到客户端的IP和端口

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

  • 相关阅读:
    关于 控制反转与依赖注入 对初学者的一点帮助
    转载--文章(感谢米粒儿博主分享) 关于 Json.net序列化时间问题
    转载--文章(感谢陈晨博主分享) 关于 Json.net
    B-JUI框架使用探究
    什么是Entity Framework(ORM)
    字典
    Docker部署Linux+Nginx+Mariadb+PHP环境
    Docker部署Django+nginx+uwsgi环境
    Docker部署Django+apache+mod_wsgi环境
    Docker容器技术
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940928.html
Copyright © 2011-2022 走看看