delphi - 如何使用 Indy TIdTCPServer 跟踪客户端数量

标签 delphi indy tcpserver

我想知道当前到 Indy 9 TIdTCPServer 的客户端连接数(在 Delphi 2007 上)

我似乎找不到提供此功能的属性。

我尝试在服务器 OnConnect/OnDisconnect 事件上增加/减少计数器,但当客户端断开连接时,该数字似乎永远不会减少。

有什么建议吗?

最佳答案

当前事件的客户端存储在服务器的 Threads 属性中,该属性是一个 TThreadList。只需锁定列表,读取其 Count 属性,然后解锁列表即可:

procedure TForm1.Button1Click(Sender: TObject);
var
  NumClients: Integer;
begin
  with IdTCPServer1.Threads.LockList do try
    NumClients := Count;
  finally
    IdTCPServer1.Threads.UnlockList;
  end;
  ShowMessage('There are currently ' + IntToStr(NumClients) + ' client(s) connected');
end;

在 Indy 10 中,Threads 属性已替换为 Contexts 属性:

procedure TForm1.Button1Click(Sender: TObject);
var
  NumClients: Integer;
begin
  with IdTCPServer1.Contexts.LockList do try
    NumClients := Count;
  finally
    IdTCPServer1.Contexts.UnlockList;
  end;
  ShowMessage('There are currently ' + IntToStr(NumClients) + ' client(s) connected');
end;

关于delphi - 如何使用 Indy TIdTCPServer 跟踪客户端数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513637/

相关文章:

c# - 错误 CS1022 : Type or namespace definition, 或预期的文件结尾

performance - Delphi:为什么二进制字符串比较运算符 (=) 不使用 SameStr?

delphi - 为什么通过 MSBuild 编译比通过 IDE 编译花费的时间长得多?

c++ - 段错误 - 通过服务器将对象发送到客户端

delphi - 具有恢复支持的 Indy Http Server

delphi - 如何在 Indy SSL 中设置 ConnectTimeout/ReadTimeout

node.js - 在 node.js 中的 TCP 服务器和 HTTP 服务器之间创建 WebSockets

ios - 在 iOS 中连接到外部数据库

delphi - TRibbon 选项卡禁用

delphi - Indy 在 POST 重定向后使用 GET 发送参数