我在 TIdTCPServer 上构建的服务器应该只能同时为一个用户提供一个连接。我搜索了很多,但我找不到解决办法。
如果没有错误,一切看起来都是正确的,我的意思是:在开始时客户端发送登录名和密码,方法 onconnect 或 onexecute 检查它们是否正常并且不存在具有相同名称的用户连接。如果一切正常,则开始交换消息。如果不是,则调用断开连接的方法。
但是,当这样的远程应用程序(使用 Indy 以外的其他工具编写的)无意中失去连接(由于网络暂时丢失)时,服务器不会立即知道这一点,并认为一切正常。同时客户端应用程序已经知道有一个错误。当网络连接再次良好时,客户端应用程序尝试连接到服务器,但尝试被拒绝(被服务器),因为服务器保持与该用户的最后连接(直到连接因错误事件而关闭的某个时间)。
有没有一种方法可以在快速恢复连接后绕过拒绝问题而不拒绝两个(来自同一客户端的最后和实际尝试连接以清除有关登录用户的信息),让他有可能直到下一次尝试?
我使用带有“心跳”的技巧来检查连接,但由于客户端数量众多且传输成本高,因此每隔 10 秒进行一次检查——客户端使用付费 gprs 连接。在这个时候,我的客户端应用程序有时会出现重新连接问题。
还有其他问题。当第一个连接表单用户正常并且他尝试从具有相同用户名的其他应用程序连接时,只有第二个连接必须被拒绝。