datasnap 2010 DataSnap服务器如何得到客户端的IP和端口
2011-02-04 14:57
363 查看
作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。
在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果奉献给大家,免得大家在花时间研究这个。
另外,通过研究发现,DSConnectEventObject.ChannelInfo.Id 属性实际上是内存地址,并不是一个简单的数字。
![](http://p.blog.csdn.net/images/p_blog_csdn_net/sunstone/EntryImages/20091212/未命名.JPG)
以下代码红色部分是关键。
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;
在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;
相关文章推荐
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中采用DataSnap的三层网络架构服务器获取客户端ip,端口信息
- DataSnap服务器如何得到客户端的IP和端口
- DataSnap如何监控Tcp/IP客户端的连接情况
- datasnap 2010 客户端如何调用服务端上自定义的方法
- 如何得到客户端的ip
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- datasnap 如何监控客户端的连接情况
- datasnap 如何监控客户端的连接情况
- C#中如何获取服务器IP,名称,操作系统,客户端IP,名称!
- 如何用nginx得到客户端ip
- 利用DataSnap的回调功能在客户端显示服务器方法的执行进度
- datasnap 如何监控客户端的连接情况
- 服务器如何获取客户端用户的(城市)地址[获得真实IP再获得城市]
- 搭建https本地服务器:如何得到被所有客户端认可的ssl证书
- 配置Exchange 2010客户端访问服务器使用静态RPC端口
- 在Apache服务器上如何从HTTP header中提取客户端X-ClientIP