PDA

Visualizza la versione completa : [DELPHI] Componenti Indy e trasferimento file


MrCocò85
04-10-2005, 16:51
Premettendo che ho consultato la guida sull'utilizzo dei componenti indy,vorrei sapere come fare per trasferire file con i componenti TidTCPClient e TidTCPServer.Ho fatto diverse prove,ma tutte hanno avuto esito negativo!Inoltre non capisco bene come si comporta l'evento onExecute di TidTCPServer!

P.S. Qaulcha esempio mi farebbe comodo!

Grazie!

alka
04-10-2005, 17:27
Generalmente, assieme ai sorgenti è possibile scaricare anche numerosi esempi e demo che utilizzano i componenti fondamentali del package.

I componenti IdTCPServer e IdTCPClient costituiscono le classi base fondamentali dalle quali derivano le varie implementazioni di client e server specifici (POP3, SMTP, ICMP, UDP, ecc.).

L'evento OnExecute viene generato quando ha luogo una condizione che cambia lo stato del componente: ad esempio, a seguito di una connessione e/o disconnessione, alla ricezione di un comando e così via.

In genere, tuttavia, è sconsigliabile usare direttamente questi componenti in un'applicazione, o meglio sono adatti per poter essere ereditati e creare un nuovo tipo di server e client "customizzato", anche se di solito, soprattutto nelle ultime versioni di Indy, si preferisce utilizzare componenti più specifici in base all'uso che se ne deve fare.

Nel tuo caso, per trasferire file, sarebbe sufficiente caricare il file da inviare all'interno di uno stream per inviare poi quest'ultimo dal server al client che lo riceve.

Di solito, segnalo un demo che è davvero utilissimo per capire come fare questo: ScreenThief (http://delphi.about.com/od/internetintranet/l/aa012004a.htm).
Si tratta di un'applicazione che trasferisce screenshot usando i componenti Indy; sostituendo alla schermata il tuo file, i concetti che ruotano attorno alla problematica inerenti l'uso dei componenti Indy dovrebbero rimanere immutati.

Prova a dare un'occhiata e mi saprai dire.

Ciao! :ciauz:

MrCocò85
04-10-2005, 18:29
ti ringrazio tantissimo,anche se sono sorti altri problemi.
Per tutta la durata del transferimento del file,il programma è inutilizzabile,e ciò non dovrebbe accadere:avresti qualche suggerimento su come avvallare quaeto problema??

alka
04-10-2005, 19:05
Dovresti usare un thread aggiuntivo ed eseguire il trasferimento del file in quel thread separato, che non interferisce con il thread primario dell'applicazione che si occupa invece della ricezione e della gestione dei messaggi (scatenando gli eventi opportuni).

So che Indy contiene anche un componente IdAntiFreeze che dovrebbe essere preposto a questo scopo (evitare il "congelamento" dell'applicazione); tuttavia, non so se ci sono effetti collaterali derivanti dal suo utilizzo (dipendono dall'applicazione e da ciò che si esegue al suo interno).

Eventualmente, consulta la Guida in merito per verificare queste condizioni.

Ciao! :ciauz:

Loading