在indy10中终止连接的最佳方法是什么?

时间:2011-02-16 14:23:08

标签: delphi delphi-7 indy10

我使用indy10进行通信,有时当客户端断开连接时会引发异常,我想知道什么是最安全的断开连接的方式(TIdContext)?

我应该怎么做OnDisconnect甚至和类似?

感谢。

2 个答案:

答案 0 :(得分:2)

引发异常是正常行为。 Indy旨在大量使用异常,不仅用于错误处理,还用于内部通知等。当OnDisconnect检测到连接已完成时会触发TIdTCPServer,因为客户端已断开连接(并且TIdTCPServer已为您处理了异常),或者因为OnExecute中发生未捕获的异常处理程序代码。无论哪种方式,使用OnDisconnect执行您需要的任何清理。在TIdTCPServer事件处理程序退出后,OnDisconnect将为您关闭套接字。

答案 1 :(得分:0)

我只想添加一些关于我知道的套接字内部工作(TCP)的内容:

所有服务器客户端都可以,它们会相互发送数据。 服务器仅与客户端不同,因此在任何客户端不首先发送连接请求之前,他是被动的。但是,如果客户端想要或被迫中断连接,则只需停止向服务器发送数据即可。要优雅地关闭连接客户端可能会发送有关此事件的特殊数据,例如通过电话说“goodbay”,但这不是绝对必需的。只需想象您(客户端)与任何服务(服务器)的电话。你开始与“你好”对话,服务工作者回应。如果您意外按下手机上的重置,则通话将会丢失。但服务仍然继续他的工作。你可以再打电话给它。没发生任何不好的事情。

您需要关注的所有内容都是稳定且正确的客户端服务器。检查发送和接收数据的错误。尝试从客户端重新连接。如果在客户端中抛出一些异常,则必须根据需要处理它,以及当这种强制事件丢失当前连接时的正常情况。

其他一切已经由 Remy Lebeau 回答。