【问题标题】:How to get the number of client and the connect/disconnect events in Synapse ?如何获取 Synapse 中的客户端数量和连接/断开连接事件?
【发布时间】:2012-06-03 08:49:50
【问题描述】:

我正在尝试使用 Synapse(TTCPBlockSocket) 而不是 Indy,但是通过官方帮助和演示我无法理解如何获取 TCP 客户端的数量,并且我没有找到有关的连接/断开连接事件Synapse,请给我一些提示或示例代码。 提前致谢 !

【问题讨论】:

  • 在服务器端,您接受的每个连接都应使用HR_Accept 原因触发OnStatus 事件。但是,对于断开连接或当前客户端计数,我找不到任何属性或事件,因为每个客户端都应该作为单独的线程运行。
  • 要检测客户端断开连接,数据交换协议应提供“再见!”“退出”或“断开连接”消息。如果协议允许,服务器也可以向客户端发送心跳消息。
  • 不是一个直接的答案,但您可以尝试 ICS(TWSocket 和 TWSocketServer),其中有很多示例,主要是 TCPServer 之一,您可以在其中查看已连接客户端的数量以及新客户端时的信息已连接。
  • “客户数量”是什么意思?您想要服务器的 IP 地址,还是与服务器的连接数?
  • @StijnSanders,我想获得连接数。 :)

标签: delphi sockets tcp indy synapse


【解决方案1】:

正如 TLama 在 cmets 中指出的那样,每个传入连接都应该使用 HR_Accept 触发 OnStatus 事件。如果我查看 TBlockSocket 源,每个断开连接,无论是通过协议还是错误,都应该在连接套接字上触发一个带有 HR_SocketClose 原因的 OnStatus 事件。

【讨论】:

  • 说实话,我有段时间没用synapse了,用过Indy和Synapse之后,又切换回了Delphi自带的阻塞模式TTcpClient/TTcpServer和自己的线程管理,见这里举个例子:xxm.svn.sf.net/viewvc/xxm/trunk/Delphi/http/xxmHttpMain.pas
  • +1,OnStatus 事件与HR_Accept 原因只有在您接受传入连接时才会得到。但你仍然可以拒绝它。因此,如果您需要收到有关传入连接的通知,您将在侦听套接字线程上下文中获得它。
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2010-11-01
相关资源
最近更新 更多