读书人

求FTP传输中断代码?解决方案

发布时间: 2012-04-09 13:41:25 作者: rapoo

求FTP传输中断代码?
我是用INDY做的!
不知道那位有,谢谢!

[解决办法]
理论上用Quit但是,会死锁,有时候FTP服务器失去响应,这时候调用Quit会卡死。

在经历了无数的挫折和失败,以及各种古怪的网络故障以后,我十分痛恨indy所谓十分先进的同步执行方式,那纯粹是C程序员水平太差导致的简单处理的结果。

我于是只能这么做

procedure TFtp.InternalAbort;
begin
try
FIdFtp.KillDataChannel;
except
end;
try
FIdFtp.IOHandler.Close;
//FIdFtp.Disconnect(False);
except
end;
end;

这么做直接断开连接,某些FTP服务器会删除已经上传的文件,某些不会,这好像在文档中没有规定。

有人评价indy 的FTP,FTP的本意是建立在telnet的基础上的,而indy却生硬的将FTP直接建立在了socket上,这个评价一语中地。

为了indy该死的FTP,花了3个月找错误。

因为服务器、网络、防火墙、路由器一系列的原因,不知道究竟是谁的问题,长时间的FTP数据传输后,命令通道会失去响应,但是并不失去连接。

indy在长时间的数据传输之后,就会在命令通道傻等服务器的响应,理论上说这没错,这没违反协议,但是这也太傻了。

然后客户机传输完成后100%处不动,这时候如果掉用FTP的quit就立即卡死,因为indy还会傻乎乎的向服务器发送一个quit指令,但是,这时候indy自己在等待服务器指令返回,这时候就卡在indy的一个临界区对象上。你说傻不傻?

反正indy这个玩意我看也快完蛋了。

读书人网 >.NET

热点推荐