Bonjour,
Cette source permet, pour commencer en quelques mots, d'échanger des fichiers à travers un réseau ou internet en Tcp.
Elle se compose d'une application serveur très rudimentaire et d'un client plus fignolé graphiquement..
Le fonctionnement est très simple.
Au préalable le serveur se trouve sur un pc (pc n°1), et le client sur un autre (pc n°2), les deux pc ayant le Framework ;).
(Vous pouvez tester en local si ça vous chante..)
L'utilisateur du pc n°1 lance l'application serveur, choisi un port, et appuie sur le bouton E (écoute).
L'application devient couleur orange si réussite, elle attend un client.
L'utilisateur du pc n°2 lance le client, tape l'adresse IP du pc n°1, rentre le même port, et appuie sur C (connexion).
Si tout se passe bien, le texte devient vert et la couleur de la form de l'application serveur verte aussi.
Vous avez maintenant créé un canal.
L'utilisateur du pc n°1 n'a plus qu'a choisir un fichier.
Le transfert débute.
Si le fichier existe sur le pc n°2, alors une boite de dialogue permet de choisir l'action a effectuer entre reprendre, annuler ou écraser..
A la fin du transfert, l'utilisateur du pc n°1 peut renvoyer un fichier directement..
Côté code, plutôt simple à comprendre et minimaliste. La gestion d'erreur n'est pas optimisée mais présente. Bien commenté. Repose sur l'utilisation des sockets en Tcp.
Nb : Bien vérifier que les ports choisis sont ouverts (routeurs, passerelles...)
Nb2 : Vous n'avez pas à retaper la même ip et port à chaque fois, ceux-ci sont sauvés à chaque modification..
Nb3 : Vous pouvez envoyer plusieurs fichiers en même temps, en relançant à chaque fois le client et le serveur avec des ports différents.
Nb4 : Vitesse limité selon votre connexion en émission et en réception. Ex je suis limité à 128ko/sec en upload, donc mon client recevra à cette vitesse. Je ne peut recevoir qu'à 1Mo/s, si le serveur peut envoyer plus (3Mo/sec par ex) je recevrai quand même à ma vitesse limite de download, soit 1Mo/sec.
Nb5 : Je n'ai pas utilisé les fonctions BeginSend et BeginReceive pour la simple raison qu'on n'a aucun contrôle de ce qui se passe derrière. Conseil, créez votre propre fonction asynchrone. C'est ce que j'ai fait suite à une erreur de Buffer saturé de la fonction, c'est un gouffre à octets, peu recommandé pour le transfert de fichiers. L'erreur provenait du fait que je lisais plus vite le fichier que je ne l'envoyais, donc on stocke, on stocke et ... error.. Il a donc fallu trouver une alternative (voir le code).
Optimisations à apporter, si ça vous fait plaisir..
-La gestion d'erreurs améliorée
-Compression à l'envoi (augmentation du débit, augmentation de la charge de travail par le processeur)
-Envois simultanés sur la même application
-Possibilité de choisir le fichier à partir du client
Source / Exemple :
Voir Zip, 2 projets, un serveur, un client
26 mai 2008 à 12:19
Sympa mais peu d'interet pour une exploitation hors LAN... un utilisateur lambda ne s'aura pas faire du NAT sur son routeur (coté serveur).
Se genre d'outil est plus exploitable sous forme de page web upload/download.
27 mai 2008 à 20:42
28 mai 2008 à 09:28
Bonne continuation Yves ;o)
28 mai 2008 à 13:59
9 avril 2009 à 13:39
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.