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高级技术(5)—建立稳定服务程序之TCP心跳包的使用

原文出处:http://blog.csdn.net/sunstone/archive/2009/12/17/5023718.aspx 为了能让我们的服务程序更加稳定,有些细节问题必须解决。就如上一讲中...

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

Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
  • shuaihj
  • shuaihj
  • 2011年01月11日 15:29
  • 2311

Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力

Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力
  • shuaihj
  • shuaihj
  • 2011年01月11日 15:28
  • 2344

Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解

Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
  • shuaihj
  • shuaihj
  • 2011年01月11日 15:26
  • 2710

[转]Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解

====================================================== 注:本文源代码点此下载 =============================...

DataSnap如何监控Tcp/IP客户端的连接情况

一个实例,如果客户端是TCP/IP是短连接的情况就没有必要了。 一、GlobVar.pas单元,定义应用系统全局数据类型及变量: unit GlobVar; interface uses Syst...
  • xieyunc
  • xieyunc
  • 2015年09月25日 14:41
  • 679

Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”

当我们在客户端用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”!! 问题原因:服务器端对提供服务的控件所属单元选择错...
  • sunylat
  • sunylat
  • 2015年06月11日 10:56
  • 5167

Delphi2010开发DataSnap服务器(一)

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

UNIX网络编程学习(8)--服务器端显示客户端的IP地址和端口号

#include "unp.h" #include int main(int argc, char **argv) { int listenfd, connfd; soc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
举报原因:
原因补充:

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