Transfert de fichier (udp+tcp)

Description

Le principe est de transfert des fichiers du client vers le serveur.
Pour lutter contre la lenteur du protocole TCP j'ai utiliser le protocole UDP pour envoyer le gros des information qui est contrôler par un peu de dialogue en TCP.
(Tester seulement sur Delphi 7.0)
Pour TCP j'ai utiliser ClientSocket et ServerSocket (plus installer sur delphi 7.0 a rajouter, on trouve pas mal d'info pour sa sur internet)
Pour UDP j'ai malheureusement utiliser un composants indy.... En effet après plusieurs essai de divers composant que j'ai pas réussi a faire marcher j'ai été obliger de me rabattre sur les composants indy.
Pour le contrôle des réception en UDP j'ai utiliser MD5 (voir dans UnitVerif.pas c'est l'adaptation d'une source de "f0xi", merci a lui): http://www.delphifr.com/codes/MD5-API-CELEBRE-ALGORITHME-HACHAGE-SOUS-DELPHI_40137.aspx

Je remercie aussi "AccessToYou" qui m'a fait découvrir les Packet Record bien pratique http://www.delphifr.com/codes/TRANSFERT-FICHIERS-SOCKETS_32793.aspx

Pour simplifier tout sa j'ai fais deux composants, un client et un serveur.
Par contre je me suis pas casser la tête à les enregistrer pour avoir un vrai composants que l'on peut poser sur la fiche.

On peut donc utiliser ses composant sans comprendre (Niveau Débutant). Mais bon comprendre c'est toujours mieux (Niveau Initié). Je suis d'ailleurs d'accord pour répondre a toutes les questions.

Source / Exemple :


Serveur plus simple que celui du zip:
(si vous voulez pas vous embêté ce serveur laissera tout les fichier ce transférer dans le dossier ou se trouve l'exe sans tenir l'utilisateur informer de l'avancement.)

uses UnitServerTrsFl;

var ServerTrsFl1: TServerTrsFl;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ServerTrsFl1:=TServerTrsFl.Create(Self);
  ServerTrsFl1.Open(45666,45666,ExtractFilePath(Application.ExeName));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ServerTrsFl1.Free;
end;

Conclusion :


Donc voila si on veut regler plus finement les transfert on peut modifier IRep de UnitD.pas (attention mettre le meme pour le fichier du client et du serveur)
On peut modifier le sleep dans Unitth.pas du client.

J'ai essayer de bien commentez ma source (j'y suis pas habituer) par contre je suis désolé mais je n'est fait aucun effort pour l'orthographe des commentaires alors bonne chance si vous les lisez.

Pour le futur: (évolutions possibles)
-> Calcul de la vitesse de téléchargement
-> Vérification a la fin du transfert par un hachage md5 du fichiers final que l'on compare a celle du client.
-> Amélioration de NumConnection (ne plus faire simplement une incrmentation pour qu'on ne puisse pas deviner le suivant (pr qu'on ne puisse pas injecter des bloc qui ne font pas partit du fichier), peut etre l'inclure ds bSecure en rajoutant 4 bytes au buffer avant le hachage + verifiaction de l'ip)
-> Envoi de fichiers dans l'autre sens, du serveur vers le client.

PS: j'attends vos commentaires

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.