2010-05-13 4 views
3

J'utilise les composants socket/server de dephi7 pour envoyer un fichier avec tfilestream du client au serveur.Delphi - comment obtenir la progression de socket.SendStream?

Je suis en mesure d'obtenir la progression du fichier reçu côté serveur, mais côté client, comment puis-je obtenir la progression du fichier envoyé?

Voici comment j'envoie le fichier:

fstream:=tfilestream.Create(opendialog1.FileName,fmOpenRead); 
    clientsocket1.Socket.SendStream(fstream); 

Merci et apprécie pour toute aide.

Répondre

5

Il ne semble pas que TClientSocket fournit des informations sur sa progression. Je vois deux alternatives:

  1. Au lieu de SendStream, utilisez TStream.Read et TClientSocket.Socket.SendBuf dans une boucle. Lisez un bloc de données du flux et envoyez-le. Répétez jusqu'à ce que vous atteigniez la fin du flux.

  2. Écrivez une classe descendante TStream qui enveloppe (ou décore) un autre flux. Ses méthodes Read, Write et Seek peuvent simplement renvoyer vers le flux encapsulé, mais vous pouvez également ajouter des événements à l'encapsuleur afin que vous puissiez être notifié chaque fois que le code de socket lit un bloc de données hors du flux - la méthode SendStream fait la même chose que j'ai décrite ci-dessus dans la première alternative.

Questions connexes