关于NMFtp控件,我要疯了!!!(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!

请看下面程序段:
for i:=0 to 3 do
begin
ftp.Host:=...;
ftp.Port:=...;
ftp.UserID:=...;
ftp.Password:=...;
ftp.Connect; //在这里出错
ftp.ChangeDir(...);
ftp.Upload(...,...);
ftp.Disconnect;
end;
目的是把文件upload到不同的ftp站点上面去,在循环里面每次给ftp的设置
不同的ftp站点,可是只有第一次能成功,循环到第二次的时候,到ftp.connect
的时候就会发生winsock异常:socket not connected.

请问怎么回事?
 
Connect不是连接后才返回吧?应该是立即返回,然后等OnConnect事件?
 
nm控件太差,(比如一个最大问题就是运行着有nm控件的程序,退不出windows)
ics的ftp控件很好用
 
connect函数好像是连接后返回的.
而且,就算是因为没有connected出错,那么也应该在connect的下一句出错,
现在却是一执行connect就出错!!!
 
还有一个可能就是Disconnect是立即返回的,是否Disconnect后处理一下消息
process messages?

或者Disconnect换 Abort 看看?
 
加上试过了,还是不行.
我甚至加上了:

ftp.disconnect;
while ftp.connected do
application.processmessages;
也不行.
 
还有一绝招:
每次循环都创建新对象(不重复用)

for i:=0 to 3 do
begin
ftp:= Create //创建
.
.
.
ftp.Free//释放
end

肯定管用
 
ftp.Disconnect 换成 ftp.Abort 也没用?
 
NM的破烂货色就别用了,免得客户说:咦,为什么运行着你的程序不能退出windows?
(实际是有时可以退、有时不能退,在nt下则不能退的多)
 
你的代码中还有什么处理吗?
我试着怎么可以呀。

要不重启试试。
 
这是我的测试代码:
procedure TForm1.Button19Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 2 do
begin
if i=0 then
NMFTP1.Host := '210.*.*.7'//具体ip我就*掉了;-)
else
if i=1 then
NMFTP1.Host := '210.*.*.132'
else
NMFTP1.Host := '210.*.*.1';


NMFTP1.Port := StrToInt(PortTxt.Text);
NMFTP1.Timeout := 5000;
NMFTP1.UserID := UserTxt.Text;
NMFTP1.Password := PassTxt.Text;

try
NMFTP1.Connect;
NMFTP1.ChangeDir('upload');
nmftp1.Upload('c:/test.dat','t'+inttostr(i)+'.dat');
except
On E:Exception do
if E.message='something'
then writeln('poo');
end ;

NMFTP1.Disconnect;
end;
end;
 
你用了代理吗?
 
没有用代理. 我也觉得不应该出现这种情况,可是确实发生了.
实际上我的几个ftp站点是完全一样的,因为我是在自己机器上
用127.0.0.1做测试的,不知道和这个有没有关系?

我现在用pipi后来的那个馊主意解决了,但是希望能有更好的办法.
等会儿我重新启动机器看一看,估计和这个没有什么关系.
 
先下了.明天见.
 
今天到公司,换了台机器测试,结果一样.

看来只好动态创建nmftp控件了....真是滑稽. :-(
 
多人接受答案了。
 
最好用RequestCloseSocket方法,其它均不能正常断开连接。
 
我的用win2000+bcb5测试 TNMFtp 时候不断的死机,连鼠标都死掉
 
我那主意可不馊
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
811
import
I
后退
顶部