Newsgroup: it.comp.lang.delphi
Titolo: idFtp Indy10 blocca applicazione?

Salve a tutti!
Sto sviluppando un'applicazione con Delphi 2005 in Win32 sotto Windows XP
che deve spedire periodicamente file in FTP ad un sito web.
Uso il componente Indy10  "IdFTP" nel modo seguente:
   idFTP1.Username:='pippo';
   idFTP1.Password:='pluto';
   idFTP1.Host:='
ftp.topolino.it
';
try
  idFTP1.Connect;
  try
    idftp1.Put('foto.jpg','foto.jpg');
  finally
    idFTP1.Disconnect;
  end;
except
  on E: Exception do
  begin
    MessageDlg........
buona parte delle volte il traseferimento funziona correttamente ma, a 
volte, l'applicazione
si inchioda irreparabilmente. La cosa sembra essere più probabile quando il 
file ha dimensioni
maggiori e/o la rete è più trafficata.
Ovviamenta devo evitare il blocco dell'applicazione mentre se qualche volta 
il trasferimento
del file non andasse a buon fine questo non costituirebbe un problema. 
Sbaglio qualcosa?
P.S. dovendo trasferire più file posso fare tanti "Put" uno dopo l'altro o è 
meglio ogni volta fare
"Connect" e "Disconnect"?
Grazie
                             Alessandro 

 maggiori e/o la rete è più trafficata.
Basta mettere un IdAntiFreeze sulla form :)
-- 
Jax
====
Il superfluo si misura dal bisogno degli altri.(Giovanni XXIII)

 ha scritto nel messaggio 
news:3bsatsF...@individual.net...


 la rete è più trafficata.
I componenti Indy fanno capo ad una logica "bloccante": quando un metodo
viene invocato, esso non ritorna il controllo alla routine chiamante
fino a quando non ha terminato il proprio compito.
E' normale, pertanto, che la tua applicazione appaia come tale mentre
esegue il trasferimento del file attraverso il protocollo FTP.
Mentre la logica utilizzata dai componenti Indy rende molto semplice
l'esecuzione di operazioni in modo sequenziale, è necessario ricorrere a
thread aggiuntivi se si vuole impedire che la chiamata dei metodi dei
componenti che lavorano sui socket blocchino il thread principale
dell'applicazioni, impedendogli di gestire i nuovi messaggi in arrivo.
L'alternativa è utilizzare il componente *TIdAntiFreeze* che permette di
mantenere "rinfrescata" l'interfaccia utente del programma durante le
operazioni che causano il blocco sopra descritto.
Ciao! :-)
-- 
Marco «Alka» Breveglieri
(marco [@] abls [.] it)
  ABLS Team S.n.c. - Software & Web
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it

 ha scritto nel messaggio 
news:a396e.592$TR5...@news.edisontel.com...


 mentre quando il trasferimento va a buon fine dura pochi secondi.
Premesso che di web, ftp etc ne so veramente poco o niente, questo tipo 
di anomalia lo riscontri sempre e solo con lo stesso server ftp oppure 
hai lo stesso problema su + server?
Inoltre, quali software usa/usano i server ftp? Non č che sul sito del 
produttore esiste una faq, un forum o qualcosa di similare nel quale 
poter cercare info su questo strano comportamento?
Hai gia verificato sul server o i server "incriminati" cosa succede 
usando un client ftp tipo cute, purchč diverso dalla tua applicazione?
Ancora, esiste una configurazione particolare sulla quale succede? Che 
so, magari la tua app č usata da 100 utenti ma il problema si verifica 
solo su 1 o 2 di loro, magari se il client ha 2000 casini non ne fa ma 
su un xp con sp2 si....
-- 
Alberto Salvati
A NEAPOLITAN Delphi Developer who is studying c# and .net
"Dicette 'o pappece 'nfaccia 'a noce dammi 'o tiempo che pure te spertoso"

 magari la tua app è usata da 100 utenti ma il problema si verifica solo su 


 Sotto indy10 non funziona molto... 
Che problemi procura? :-/




 ha scritto nel messaggio
news:vzL6e.767930$b5.34...@news3.tin.it...


 a piacere...
Non credo che sia possibile progettare una suite di componenti 
"bloccanti" senza fornire la possibilità di specificare un tempo limite 
d'attesa (timeout). Il componente incriminato, *TIdFTP*, possiede la 
proprietà /TransferTimeout/ che dovrebbe avere proprio lo scopo richiesto.
Ciao! :-)


Ho fatto qualche prova compilando la stessa semplice applicazione di test
in Delphi 2005 e Delphi 7. Tale applicazione non fa altro che spedire
ogni minuto  un file da 50 KByte ad un server FTP.
In Delphi 2005 a volte il  trasferimento funziona ma frequentemente
ottengo il blocco definitivo delll'applicazione, l'antifreeze sembra non
funzionare per niente e nemmeno il TransferTimeout migliora la
situazione.
In Delphi 7 l'antifreeze funziona e quando un trasferimento non va a buon 
fine
al successivo tentatvo di connessione mi da un "Eid Already Connected ' e
comunque non si blocca.
A questo punto penso di passare i componenti ICS consigliati da Giorgio
oppure sapete se č possibile e consigliabile  installare Indy9 in Delphi 
2005?
Grazie a tutti!
Ciao                                          Alessandro 

 2005?
Secondo me, la soluzione migliore è quella di cercare di capire dove 
l'applicazione si blocca, perchè si blocca, perchè vengono restituiti i 
messaggi di errore che ti ritrovi ed accertarsi soprattutto che i 
componenti vengano utilizzati nel modo corretto (posta il codice attuale 
che lo guardiamo...).
Se è stata commessa qualche "leggerezza" nell'uso dei componenti e la si 
ripete con gli altri, ti ritrovi punto e a capo. :-|


Il codice è quello che avevo già postato nel messaggio iniziale:
   idFTP1.Username:='pippo';
   idFTP1.Password:='pluto';
   idFTP1.Host:='
ftp.topolino.it
';
try
  idFTP1.Connect;
  try
    idftp1.Put('foto.jpg','foto.jpg');
  finally
    idFTP1.Disconnect;
  end;
except
  on E: Exception do
  begin
    MessageDlg........
  end;
viene chiamto da un timer ogni minuto, c'è l'antifreeze e il TransferTimeout 
è a 20000 ms;
i problemi li ho compilando con Delphi 2005 completo di update 1 e 2 sotto 
Windows Xp sp2
con connessione ADSL verso un server UNIX Type: L8.
Il blocco, quando avviene, è definitivo e non ho nessun messaggio d'errore.
Ricompilando lo stesso codice con Delphi 7 non ho più blocchi e, quando 
capita un problema
(al server?), ottengo il messaggio "Eid Already Connected ".
Comunque ho cominciato a testare il componente FTP  ICS: sta trasferendo da 
7 ore ogni minuto
senza nessun problema!
Grazi Ciao                                                Alessandro


 Sotto indy10 non funziona molto...
E' l'unico problema che ho avuto anche io passando dalla 9 alla 10, nel mio
caso con i componenti pop3 e smtp. Anche scrivendo sui forum indy l'unica
risposta che ho avuto č stata quella di inserire l'invio e la ricezione in
thread separati
-- 
Lis        
www.alessandroghezzi.it
O'Telma:   
http://snipurl.com/otelma
Gli Dei hanno dato agli uomini due orecchie e una bocca per poter ascoltare
il doppio e parlare la metą (Talčte)