[Delphi] Transfert Fichier avec TCP

Bonjour,

Je suis entrain programmer un application client/server en delphi, un genre de logiciel de chat quoi.. je suis maintenant rendu à l'étape ou je dois pouvoir envoyer des fichiers à un utilisateur. Maintenant, je suis un peu perdu, je ne sais pas comment transférer un fichier d'un client à un autre client (lire un fichier puis l'envoyer/recevoir). Donner-moi une piste .. Est ce que je dois utiliser un TStream? J'utilice les protocoles TCPIP et TCPServer pr la communication. Si vous connaissez un bon link vers un demo qui ferait qq chose de semblable, ca pourrait aussi m'aider.

Merci

3 réponses

  1. Ben ecoute pour moi c'est pareille, j'arrive a l'envoyé a un serveur avec indy, mais du serveur au client impossible :/
    0
    1. Bonjour,

      Si tu utilises Delphi 3, ce tutorial te conviendra (par contre j'ai un problème pour connecter mon client à mon serveur, si tu pouvais m'aider :) )... Alors voila :

      D'abord, il te faut 2 applications : un client et un serveur. Tu contrôles le serveur, le client obéit à tes ordres.
      Dans ce tutorial, le serveur accepte 1 seul client.
      Notons le composant TCP du client : ClientTCP
      et le composant TCP du serveur : ServeurTCP

      /// Passons la connexion des deux applications, puisque tu sais comment faire ///

      Imaginons que tu utilises le port 7385 (au hasard) pour le transfert des fichiers.
      D'abord, faisons un envoi de texte (le texte : 'Bonjour!') du client vers le serveur.

      Le client enverra de l'information par un bouton.

      procedure ButtonEnvoyerInformations(Sender:Tobject);
      Var
      Data: Variant; // c'est le tampon qui contient les informations que tu veux envoyer
      begin
      Data := 'Bonjour!'; // affectation du texte voulu
      ClientTCP.SendData(Data);
      end;

      // Cela enverra ce texte

      ---------- Passons au serveur ------------

      On considère bien sur que le serveur est connecté et prêt à recevoir.

      procedure ServeurTCPDataArrival(bytes_total: Integer); // bytes_total représente la taille totale des informations reçues
      Var
      TailleData: Integer; // Pour se souvenir de la taille des informations - utile pour plus loin
      begin
      TailleData := bytes_total; // Cela affecte la taille des informations.
      ClientTCPSendComplete(ServeurTCP); // Ton erreur est possiblement ici : le transfert doit être terminé, dès que le serveur reçoit des informations, il attend que le transfert soit fini avant de lire les infos.

      end;

      procedure ServeurTCPSendComplete(Sender: TObject);
      Var
      Data: OleVariant; // Contiendra les informations reçues.
      begin
      ServeurTCP.GetData(Data, VT_BSTR (c'est le type String: pour l'utiliser, ajoute "ActiveX" dans la clause "Uses"), TailleData (C'est la que TailleData sert. Ce paramètre sert à déterminer la taille des informations: utile pour ne pas déclencher d'erreur.));
      // Ici, tu peux mettre ce que tu veux, sachant que Data contient l'information reçue.
      end;

      Voila, tu peux faire réciproquement serveur->client si le serveur est connecté au client ;)

      Ce n'est peut etre pas très clair, mais j'ai tenté de répondre à ton problème
      Oups pardon ce n'est pas client / serveur mais client / client. C'est à peu près pareil. N'oublie pas : un TCP ne peut être connecté qu'a un autre TCP. Si tu veux qu'une application aie plusieurs connexions, il faut ajouter plusieurs TCPs.

      Bonne chance pour la suite, j'espere que mon tutorial t'a été utile. Si tu as besoin d'autres informations, envoies un message sur ce topic, je répondrai ;)

      INFOS SUPPLEMENTAIRES :

      -------- Types ActiveX (liste complète sous Delphi 3) (extraite de l'aide ActiveX Intranet NEWT) :

      Byte VT_UI1 vbByte
      Integer VT_I2 vbInteger
      Long VT_I4 vbLong
      Single VT_R4 vbSingle
      Double VT_R8 vbDouble
      Currency VT_CY vbCurrency
      Date VT_DATE vbDate
      Boolean VT_BOOL vbBoolean
      SCODE VT_ERROR vbError
      String VT_BSTR vbString
      Byte Array VT_ARRAY | VT_UI1 vbArray + vbByte

      __________________________________________________________________________________________________________

      Si tu pouvais m'aider à connecter mes 2 applications, aide-moi aussi : j'ai pris du temps à faire ton tutorial, accordes un peu de temps à m'aider également :)
      0
      1. PS : certains bouts de texte ne sont pas apparus au formatage, c'est dommage: je vais essayer de réparer un peu :

        "le client obéit à tes .... ordres".

        "la taille totale des ..... informations"

        "le transfert doit être terminé ... dès que le ... serveur..."

        "dans la clause ... "Uses".

        "utile ... pour ne pas déclencher d'erreurs."

        "N'oublie pas: un TCP ne peut être connecté..."

        "il faut ajouter plusieurs TCPs"

        "besoin d'autres informations ... poste un message sur ce topic"

        "à faire ton ... tutorial".

        Je rajoute "Merci" à la fin ;)

        Voila :)
        0