(高分求解)如何解决 Connection Closed Gracefully 在用tidftp的时候,这个异常有时会出现有时又不会出现,有时候在connect时出现,有时

zzzl 2005-03-16 12:40:26
如何解决 Connection Closed Gracefully

在用tidftp的时候,
这个异常有时会出现有时又不会出现,有时候在connect时出现,有时在list时出现,有时即使出现也可以正常上下传文件,有时却又不行

谢谢~
...全文
3816 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeeyee 2005-05-13
  • 打赏
  • 举报
回复

1,Connection Closed Gracefully

是正常关闭 FTP 的连接。点击断开连接,
网络出现问题,服务器出现问题,都出现这种情况。

解决方法,把异常屏蔽掉了就有了。

2,有时即使出现也可以正常上下传文件,有时却又不行

这是因为 IdFTP 使用 阻塞模式。
工作时,网络不好的情况就可以继续上传。
网络情况好的情况时候不可以上传。

原理不清楚,希望都说对了。

zzzl 2005-05-13
  • 打赏
  • 举报
回复
我换回delphi自带的版本就好了,那些问题都是出在10上的
vinsonshen 2005-03-24
  • 打赏
  • 举报
回复
up
DeltaCat 2005-03-24
  • 打赏
  • 举报
回复
"Connection Closed Gracefully" 只在 DEPHI IDE 中运行的时候 才会出现,发布出的EXE 单独运行时不会出现的

cjf1009 2005-03-24
  • 打赏
  • 举报
回复
indy系列组件的工作原理应该差不多,下面是我研究的idtcpserver的一些心得,你可以参考一下

IndyServer为每个客户端建立一个线程,然后在线程里read数据。
我们一般这样写服务器端的接收程序:
if not AThread.Terminated and AThread.Connection.Connected then //注意这里
begin
AThread.Connection.ReadBuffer(Command,SizeOf(TCommand));
if Command='1' then
……

现在以服务器端为例,研究退出。
因为indy是阻塞的,所以程序会等停在read那里;接到数据后,程序继续运行,处理完数据后,线程自动又会运行到read那里等待数据。如果客户端突然disconnect,这里的read自然会报错;所以正确的退出方式应该是:在接收数据以后的处理代码里,服务器端断开连接:

注意我标注的地方:
if not AThread.Terminated and AThread.Connection.Connected then //注意这里
程序再运行到这里的时候,AThread.Connection.Connected 已经为false,则线程自动退出了,连接断开了。
示例:

if not AThread.Terminated and AThread.Connection.Connected then //注意这里
begin
AThread.Connection.ReadBuffer(Command,SizeOf(TCommand));
if Command='Server Quit' then
begin
Command := 'Client Quit';
AThread.Connection.WriteBuffer(Command,Sizeof(Command));
AThread.Connection.Disconnect;
end;

在客户端建立线程来接收数据的,基本也是这样写的。所以也需要得到一个退出的统治(程序中的'Client Quit'),然后主动退出。这就是我所说的握手退出。

自己研究的,大家讨论。
redmoon_line 2005-03-16
  • 打赏
  • 举报
回复
关注
vinsonshen 2005-03-16
  • 打赏
  • 举报
回复
关注
up

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧