如果客户端是TCP/IP是短连接的情况就没有必要了。

 type
pClientConns = ^TClientConns; // 客户连接
TClientConns = record
clientid: integer;
ip: string;
port: string;
logintime: TDateTime;
end; type
G_ClientConnects: TDictionary<TIdTCPConnection, pClientConns>; // 客户端连接字典 procedure TServerContainer1.DSTCPServerTransport1Connect
(Event: TDSTCPConnectEventObject);
var
p: pClientConns;
begin
try
if G_ConnnectCount >= G_MaxConnNum then
begin
LogInfo('已超过系统授权的客户连接数');
TIdTCPConnection(Event.Connection).Disconnect;
exit;
end;
InterlockedIncrement(G_ConnnectCount);
New(p);
if Assigned(p) then
begin
p^.clientid := Event.Channel.ChannelInfo.Id;
p^.ip := Event.Channel.ChannelInfo.ClientInfo.IpAddress;
p^.port := Event.Channel.ChannelInfo.ClientInfo.ClientPort;
p^.logintime := Now;
G_ClientConnects.Add(TIdTCPConnection(Event.Connection), p);
PostMessage(Application.MainForm.Handle, WM_ADDUSER, wParam(p),
lParam(TIdTCPConnection(Event.Connection)));
end;
except
exit;
end;
end; procedure TServerContainer1.DSTCPServerTransport1Disconnect
(Event: TDSTCPDisconnectEventObject);
var
p: pClientConns;
begin
try
if G_ConnnectCount >= then
InterlockedDecrement(GlobalVar.G_ConnnectCount);
p := G_ClientConnects.Items[TIdTCPConnection(Event.Connection)];
if Assigned(p) then
begin
SendMessage(Application.MainForm.Handle, WM_DELUSER, wParam(p), );
G_ClientConnects.Remove(TIdTCPConnection(Event.Connection));
end;
except
exit;
end;
end; procedure Tf_MainForm.AddUser(var msg: TMessage);
var
p: pClientConns;
begin
try
Label4.Caption := IntToStr(G_ConnnectCount);
p := pClientConns(msg.WParam);
if Assigned(p) then
begin
ClientDataSet1.Append;
ClientDataSet1.FieldByName('id').AsInteger := p^.clientid;
ClientDataSet1.FieldByName('ip').AsString := p^.ip;
ClientDataSet1.FieldByName('port').AsString := p^.port;
ClientDataSet1.FieldByName('time').AsDateTime := p^.logintime;
ClientDataSet1.FieldByName('conn').AsInteger := msg.LParam;
ClientDataSet1.Post;
end;
except
on E: Exception do
begin
LogInfo('Tf_MainForm.AddUser---' + E.Message);
exit;
end;
end;
end; procedure Tf_MainForm.DelUser(var msg: TMessage);
var
p: pClientConns;
begin
try
Label4.Caption := IntToStr(G_ConnnectCount);
p := pClientConns(msg.WParam);
if Assigned(p) then
begin
if ClientDataSet1.FindKey([p^.clientid]) then
ClientDataSet1.Delete;
Dispose(p);
end;
except
on E: Exception do
begin
LogInfo('Tf_MainForm.DelUser---' + E.Message);
exit;
end;
end;
end;

datasnap 如何监控客户端的连接情况的更多相关文章

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

    一个实例,如果客户端是TCP/IP是短连接的情况就没有必要了. 一.GlobVar.pas单元,定义应用系统全局数据类型及变量: unit GlobVar; interface uses System ...

  2. 使用PowerShell 监控运行时间和连接情况

    概念 Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershell需要.N ...

  3. zabbix监控redis连接情况

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本对red ...

  4. 关于VS连接Oracle数据库提示:“尝试加载oracle客户端时引发badimage,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”的解决方案。

    错误一.关于VS连接Oracle数据库提示:“尝试加载oracle客户端时引发badimage,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”的解决方案. ...

  5. netstat监控大量ESTABLISHED连接与Time_Wait连接问题

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  6. 如何在安装32位Oracle客户端组件的情况下以64位模式运行

    C#使用System.Data.OracleClient连接Oracle数据库.之前在WinXP上正常运行的程序移植到Windows 2008 x64上之后就连不上数据库了,错误信息如下:启动data ...

  7. netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  8. WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转)

    WCF服务运行一段时间后客户端无法连接WCF服务的解决办法 (转) Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信 ...

  9. 设置CentOS里的Mysql开启客户端远程连接

    CentOS系统安装好MySQL后,默认情况下不支持用户通过非本机连接上数据库服务器,下面是解决方法: 1.在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的 ...

随机推荐

  1. LG3377 【模板】左偏树(可并堆)

    好博客 1 2 上面那个用数组写的跑的快,且便于封装,就用他的代码了. 代码 #include<cstdlib> #include<cstdio> #include<cm ...

  2. day26 python学习 对象的接口,封装,私用属性 property

    # 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...

  3. benthos 几个方便的帮助命令

    benthos 的命令行帮助做的是比较方便的,基本上就是一个自包含的帮助文档 全部命令 benthos --help 查询系统支持的caches benthos -list-caches 说明 使用帮 ...

  4. nyoj 幸运三角形

    幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒 ...

  5. 为什么要用MQ

    现在公司系统在做微服务化,很多人在设计服务间通信时都会想到用MQ,然而有些人居然说不清楚为啥要用MQ? 其实用它主要是两点考虑: 1.应用解耦:两个服务间通过MQ通信,可以不用完全知道对方的存在,实现 ...

  6. 转Python 和C#的交互

    http://www.cnblogs.com/wilber2013/category/708919.html IronPython和C#交互   IronPython是一个.NET平台上的Python ...

  7. Linux基本操作命令及作用

    文件和目录操作命令 命令 作用 cd change directory,切换目录 cp copy,其功能为复制文件或目录 find 用于查找目录或文件 mv move ,移动或重命名文件或目录 pwd ...

  8. 如何检测NFC芯片型号?NFC手机即可!

    拿到了NFC标签之后,因为很多项目中的需求,用户需要对自已的NFC芯片进行选型,也就需要判断NFC芯片的类型?芯片是原装进口还是国产兼容的?芯片内存有多少?芯片存储内部结构如何......,而且用户还 ...

  9. java 字符串String

    在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象的方法: 只要是双引号标 ...

  10. 选择符API

    querySelector() querySelector()方法接收一个CSS选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null. //获得body元素 var body = ...