一个关于Indy控件的IdTCPClient的连接问题! ( 积分: 200 )

  • 主题发起人 主题发起人 qby
  • 开始时间 开始时间
Q

qby

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用IdTCPClient的时候,碰到一个棘手的问题:当使用IdTCPClient.connect连接某个server时,由于连接的时间可能过长,在连接的过程中,我希望能随时、快速地中断这个连接。我应该如何做呢?我是使用IdTCPClient.disconnect去断连,但好像要很长时间才可以中断连接。
 
我在使用IdTCPClient的时候,碰到一个棘手的问题:当使用IdTCPClient.connect连接某个server时,由于连接的时间可能过长,在连接的过程中,我希望能随时、快速地中断这个连接。我应该如何做呢?我是使用IdTCPClient.disconnect去断连,但好像要很长时间才可以中断连接。
 
IdTCPClient1.Connect(5000);
连接设置一个时间,如果是Connect(-1),一直连接,这样中断就比较慢,
 
IdTCPClient的连接和中断连接确实挺慢的,频烦开关的思路不好。
 
我也设置了超时时间,如:3000毫秒。但我想在这个时间内中断连接,就不知道该怎么办了?
 
不可以吧
 
你可以考虑用多线程做,一个线程接收命令,一个处理
当你不想等返回的时候,你不等就是了,和tcp的连接可以没关系
 
DisconnectSocket
 
没有什么好方法能够强制断开,时间延迟是一定的。
 
我也觉得你放在线程来实现比较好,采用多线程,不要来回开关
 
我在使用一些下载软件时,经常碰到这种情况,如:flashget,它们在连接server时,就可以随时中断连接,如:pause、stop等动作!好想知道是如何做到的!

另外用多线程的话!d_eng的想法我也没太明白!但我对多线程的设计还算可以!
 

我看你是要这个吧,有全部源码.

是在我的邮箱里的,用网际快车新建下载任务的地址栏输入:

http://m150.mail.126.com/coremail/fcg/ldmsapp/windows.rar?lettsid=VATZcpFGftSAyzQJ&mid=1tbiGQhJoEH3UvE7swAAsl%250A25%250A8388762%250A1&funcid=readpart&part=3&filename=windows.rar&download=1

里面应该有你要的,花了我不少的TIME



 
想断开时把对象给Free了就行了,用时再Create
 
难道IDCLIENT就真的没有好的办法了吗?
 
我也碰到这样一个问题,就是当VC写的Server断开的后,怎么IdTcpClient的连接还保持着呢,我贴上源代码,网富翁之点。
//检测是否连接的线程
TThreadCheckConn = class(TThread)
private
{}
protected
procedure Execute; override;
procedure ShowConnState;
end;
procedure TThreadCheckConn.Execute;
begin
Self.FreeOnTerminate:=True;
repeat
//Synchronize(Self.ShowConnState);
Self.ShowConnState
until Self.Terminated;
end;

procedure TThreadCheckConn.ShowConnState;
var
i : integer;
begin
//检查IdTcpClient的连接状态,如果没有连接,则连接
try
{****** 下面的这个判断怎么在Server程序关闭后却总是为真呢 *******}
if not (FrmMain.IdTCPClient.Connected) then
FrmMain.IdTCPClient.Connect(500);
except
FrmMain.StatusBar.Panels[2].Text:='与采集端连接失败'
end;
end;
 
>>另外用多线程的话!d_eng的想法我也没太明白!但我对多线程的设计还算可以!

我的意思是:
1)开个线程,在其中用IdTCPClient.connect连接某个server,
2)主线程中检测connect的状态,
如果connected=false,想中断connect的话,只需忽略它,让他自己timeout
如果想立刻再连接,可以另开一个client
 
后退
顶部