本文整理自网络,侵删。
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;――――――――――――――――原文链接:https://blog.csdn.net/slhfine/article/details/46474255
相关阅读 >>
Delphi xe5 android 开发实现手机打电话和发短信
Delphi 时间与相关类型(3): tfiletime、tsystemtime 及 dos 时间
Delphi strutils.leftstr、strutils.rightstr - 提取左右字符串
更多相关阅读请进入《Delphi》频道 >>