[Delphi] Transfert Fichier avec TCP

[Fermé]
Signaler
-
 Bacterius -
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

Ben ecoute pour moi c'est pareille, j'arrive a l'envoyé a un serveur avec indy, mais du serveur au client impossible :/
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 :)
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 :)