1

我有一个使用 TCP/IP 的 DatasnapXE 客户端服务器应用程序。服务器使用 TDSServer.broadcastmessage 向客户端广播消息 如果碰巧用户由于某种原因不再可用,DSServer 将触发 OnError 事件。

在 OnError 中,我无法弄清楚如何确定哪个用户已关闭?有可能吗?

最好的问候, 基里尔哈吉耶夫

4

1 回答 1

1

在 XE 中没有简单/明显/内置的方法来确定这一点。你可以实现一些东西来完成这个,但它可能不像你想要的那么优雅。例如,您可以让服务器查询所有连接的客户端并让他们回复说他们仍然在那里。消除过程会将您带到断开连接的客户端。

主要问题之一是 XE 存在一个错误,它阻止会话管理使用 TCP 连接。否则,您可能能够导航活动会话(其中可能包含用户/客户端信息)以查看缺少哪些会话。

此外,XE 不支持 TCP Keep-Alive 设置,这在 TCP 连接被切断(例如,网络电缆被拔出)但仍处于打开状态的情况下很有用。如果没有 Keep-Alive,您只有在尝试编写某些内容时才知道客户端已消失。

您可能会发现在 RAD Studio/DataSnap 的未来版本中提供了您想要轻松完成此任务的功能。

于 2011-08-05T19:34:16.970 回答