Rechercher : dans
Par :

[Delphi] Transfert Fichier avec TCP

Dernière réponse le 15 fév 2008 à 21:18:12 Durielz, le 9 nov 2006 à 17:29:33 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [Delphi] Transfert Fichier avec TCP » dans :
Scanner les fichiers transférés dans WLM avec Avast! VoirScanner les fichiers transférés dans WLM avec Avast! Windows Live Messenger vous permet de transférer et de recevoir facilement des fichiers de vos contacts. Mais qu'est ce qui vous dit que le fichier que vous êtes en train de télécharger est sain...
Discover, le transfert de fichiers en WiFi sur votre iPhone VoirDisponible sur l'App Store depuis le 20 novembre 2008, Discover est une application qui permet l'échange de fichiers du PC vers l'iPhone ou l'iPod Touch. Celle-ci installe un serveur WebDAV sur votre iPod ou iPhone. Simple à utiliser, elle...
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Télécharger Medieval Bluetooth OBEX File Transfer VoirAuparavant pour transférer des données de votre mobile vers votre ordinateur, il fallait utiliser des câbles. Mais avec la technologie bluetooth, c’est désormais sans fil. Medieval Bluetooth OBEX File Transfer est un gestionnaire de transfert...
Cryptographie - Secure Shell (protocole SSH) VoirInternet permet de réaliser un grand nombre d'opérations à distance, notamment l'administration de serveurs ou bien le transfert de fichiers. Le protocole Telnet et les r-commandes BSD (rsh, rlogin et rexec) permettant d'effectuer ces tâches...

1

Nostaroth, le 18 déc 2007 à 21:02:08

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

Répondre à Nostaroth

2

Bacterius, le 15 fév 2008 à 21:11:38

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 :)

Répondre à Bacterius

3

 Bacterius, le 15 fév 2008 à 21:18:12

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 :)

Répondre à Bacterius