我使用 indy10 进行通信,有时当客户端断开连接时会引发异常,我想知道断开连接(TIdContext)的最安全方法是什么?
我应该在 OnDisconnect 上做什么甚至类似的事情?
谢谢。
引发异常是正常行为。Indy 旨在大量使用异常,不仅用于错误处理,还用于内部通知等。 当检测到连接完成OnDisconnect
时触发,因为客户端断开连接(并为您处理了异常)或因为您的处理程序代码中发生了未捕获的异常。无论哪种方式,用于执行您需要的任何清理。 事件处理程序退出后将为您关闭套接字。TIdTCPServer
TIdTCPServer
OnExecute
OnDisconnect
TIdTCPServer
OnDisconnect
我只想添加一些关于我知道的套接字内部工作 (TCP) 的内容:
服务器和客户端所做的所有事情都是相互发送数据。服务器与客户端不同,因此他是被动的,直到任何客户端不首先发送连接请求。但是如果客户端想要或被迫断开连接,所要做的就是停止向服务器发送数据。要优雅地关闭连接,客户端可能会发送有关此事件的特殊数据,例如通过电话说“goodbay”,但这不是绝对必需的。简单地想象一下从你(客户端)到任何服务(服务器)的电话)。您以“你好”开始对话,服务人员响应。如果您不小心按了手机上的重置,通话将丢失。但服务仍然继续他的工作。你可以再次调用它。没有什么不好的事情发生。
您需要关心的只是稳定和正确的客户端和服务器本身的工作。检查不正确的发送和接收数据。尝试在客户端需要时重新连接。如果客户端内部抛出一些异常,则必须根据需要对其进行处理,并且当当前连接因此类强制事件而丢失时是正常情况。
Remy Lebeau已经回答了其他所有问题。