Bonjour,

J'utilise dans diff�rents programmes le composant Indy TIdFTP, afin de g�rer mes acc�s et transferts FTP.

Je me suis rendu compte r�cemment que lorsqu'on fait une connexion au serveur FTP, puis �ventuellement diff�rents requ�tes, il arrive que le serveur FTP ne r�ponde plus. Et dans ce cas l�, le composant TIdFtp ne renvoie pas une erreur, il reste en attente d'une r�ponse du serveur FTP, et mon programme reste fig�.

Exemple de prog d'acc�s FTP :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
TIdFTP *idftp = new TIdFTP(NULL);
idftp->Passive = true;
idftp->Host     = hote;
idftp->Port     = port;
idftp->User     = login;
idftp->Password = password;
 
idftp->Connect();
 
...
 
idftp->Disconnect();
delete idftp;
J'ai tent� un try{ idftp->Connect();} catch(...) pour d�tecter un �ventuel �v�nement "erreur" ou "d�lai de reponse trop long" mais le composant ne g�re pas cela...

Auriez-vous des solutions pour faire en sorte qu'une absence de r�ponse du serveur FTP ne bloque pas mon appli ? Sachant que j'aimerais bien conserver le composant Indy FTP et tout ce que j'ai d�j� fait autour...

Je pensais � appeler la partie connexion FTP / transfert / d�connexion via un thread et tuer automatiquement le thread s'il ne r�pond pas au bout d'un certain temps, mais je ne parviens pas � tuer correctement le thread ( le thread attend que la connexion FTP soit ferm�e et comme le serveur FTP ne r�pond plus, �a n'arrive jamais et mon prog reste bloqu�)...

Voil� ce que j'avais fait avec les threads :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//---------------------------------------------------------------------------
class TMonThreadFTP : public TThread
{
private:
protected:
       void __fastcall Execute();
public:
        __fastcall TMonThreadFTP(bool CreateSuspended);
        Ftp *ftp;
};
//---------------------------------------------------------------------------
__fastcall TMonThreadFTP::TMonThreadFTP(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
 
//---------------------------------------------------------------------------
void __fastcall TMonThreadFTP::Execute()
{
TIdFTP *idftp = new TIdFTP(NULL);
idftp->Passive = true;
idftp->Host     = hote;
idftp->Port     = port;
idftp->User     = login;
idftp->Password = password;
 
while(!this->Terminated)
{
        idftp ->Connect();
 
        Suspend();
}
delete idftp;
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonDemarrerConnexionFtpClick(TObject *Sender)
{
MonThreadFTP = new TMonThread(false);
MonThreadFTP->FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ButtonTuerConnexionFtpClick(TObject *Sender)
{
delete MonThreadFTP;
}
//---------------------------------------------------------------------------
Merci par avance pour votre aide et vos id�es !