我使用TIdFTP控件连接到FTP服务器。my FTP connection is terminated by something (ftp服务器/防火墙?)经过60秒的无动于衷。一旦连接终止,我就不能再使用FTP控件(TIdFTP)了,因为它的状态是未定义的。例如,每次尝试REconnect时,我都会得到相同的(10038)错误。然而,FTP.Connected显示的是真。尝试FTP.Disconnect会给我一个“连接正常关闭”的错误,而控件仍然是连接的。唯一的解决办法是结束程序并重新启动它。
NAT的生存状态已经设置为15000。

如何重置FTP控件的状态(如何断开连接)?
发布于 2016-08-30 16:28:42
我使用TIdFTP控件连接到FTP服务器。我的FTP连接似乎被某种东西(ftp服务器/防火墙?)终止了。在60秒的不活动之后
TIdFTP有一个NATKeepAlive属性,以避免在通过FTP不知情的路由器/防火墙连接时发生这个确切的问题。在传输期间,在控制连接上临时启用TCP保持生命,这样它就不会过早关闭。
然而,FTP.Connected显示的是真。
这意味着IOHandler.InputBuffer中可能包含未读数据。Connected()旨在返回True,即使套接字已经关闭,读取操作仍然可以满足。
尝试FTP.Disconnect会给我一个“连接正常关闭”的错误
默认情况下,Disconnect()在关闭套接字之前向服务器发送一个QUIT命令。由于连接已经消失,所以发送失败。
Disconnect()有一个可选的ANotifyPeer参数,您可以将其设置为False以跳过QUIT命令。
您还应该在意外断开连接后对Clear()进行IOHandler.InputBuffer,以清除任何未读数据。
唯一的解决办法是结束程序并重新启动它。
这永远不是解决办法。更糟糕的是,您可以简单地销毁TIdFTP对象并创建一个新对象。但是,如果你遵循上述步骤,你甚至不需要求助于此。
发布于 2016-08-31 07:36:38
您不能让TIdFTP保持打开。每次超时时,服务器端都会关闭连接。
当您使用此组件在一段时间间隔内将文件获取或放入文件服务器时,您可以在使用TIDFTP之前进行连接,并在使用后断开连接。然后,您就不需要费心地释放组件和连接故障了。
https://stackoverflow.com/questions/39228118
复制相似问题