Envoyé par
tenebriox
Bonjour à tous,
Je souhaiterais mettre en oeuvre un client/serveur en UDP mais qui soit mieux fiabilisé que le protocole de base...
Pour des besoins principalement de temps réel, je suis obligé de passer par UDP, et je souhaiterais dans un premier temps détecter une perte de paquet.
Voici comment j'ai décomposé mon programme :
emetteur.c : envoie un fichier texte au serveur
receveur.c : en attente de réception
socket.c : permet la création de sockets udp (grâce aux fonctions d'envoi/réception) contenues dans protocole.c
protocole.c : contient notamment les fonctions envoi/réception au lieu de send/recv.
Ce que je veux faire concrètement, c'est dans mon protocole.c :
- lorsque je reçois un paquet, je mets à jour le dernier num d'acquittement
- lorsque j'envoie un paquet, j'inclus dans un nouveau header le dernier num d'acquittement
Ceci va être un premier pas vers l'acquittement de paquets mais mon principal problème c'est que le receveur et l'émetteur fonctionnent de manière unidirectionnelle si je puis dire. C'est à dire que chacun ne fait qu'envoyer ou que recevoir.
J'ai pensé à envoyer un message "bidon" quand le receveur reçoit un paquet.
Et idem pour l'émetteur : après envoi d'un paquet, on scrute si des données sont dispos le socket avec select.
Donc, vous allez me dire que tout devrait fonctionner maintenant ?!
Et bien non !! J'ai un gros problème au niveau de la "bidirectionnalité" !
Mon émetteur/receveur ont la même IP locale (127.0.0.1) et écoutent le même port.... Du coup par exemple mon receveur capte lui même le paquet qu'il envoie à destination de l'émetteur...
Je peux fournir le code si besoin
Bravo si vous m'avez lu jusqu'au bout, et si vous avez des idées, que ce soit pour implémenter les acks différemment, ou pour mon problème de bidirectionnalité n'hésitez pas, je vous attends ^^
Partager