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 :
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...
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;
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 :
Merci par avance pour votre aide et vos id�es !
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; } //---------------------------------------------------------------------------
Partager