Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
2009-12-12 10:03
573 查看
作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端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;
在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和端口
- datasnap 2010 DataSnap服务器如何得到客户端的IP和端口
- DataSnap服务器如何得到客户端的IP和端口
- DataSnap服务器如何得到客户端的IP和端口
- Delphi2010中采用DataSnap的三层网络架构服务器获取客户端ip,端口信息
- DataSnap如何监控Tcp/IP客户端的连接情况
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
- 如何获取客户端IP、WEB服务器IP
- 如何用 PHP 来获取客户端 IP 和 服务器(主机)的 IP
- Delphi2010中DataSnap高级技术
- 利用DataSnap的回调功能在客户端显示服务器方法的执行进度
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- C#中如何获取服务器IP,名称,操作系统,客户端IP,名称!
- PHP 如何显示客户端 IP 与服务器 IP
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- 如何查找oracle中的服务器端口号,客户端端口号,监听端口及号Enterprise Manager Console HTTP 端口
- Delphi2010中DataSnap高级技术