IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Problème client/serveur UDP (fiabilisation des transferts)


Sujet :

Réseau C

  1. #1
    Membre régulier Avatar de tenebriox
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 88
    Points : 119
    Points
    119
    Par défaut Problème client/serveur UDP (fiabilisation des transferts)
    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 ^^

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Et si tu essayes avec 2 PC distincts, il se passe quoi ? Ici, le problème vient plutôt de la méthode de tests que de la méthode d'acknowlegment.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par tenebriox Voir le message
    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 ^^
    Salut,

    C'est normal que tu recoives le paquet que tu as émis , il te suffit de le jeter ( de détecter que c'est toi même en regardant l'adresse de l'émetteur ), et de faire un send recvfrom pour recevoir le paquet que tu attends.

    Sinon, tu peux également positionner la socket pour ne pas recevoir tes propres paquets, cela se fait en broadcast, mais je ne vois pas pourquoi on ne pourrait pas le faire en unicast ( je ne me souviens plus de l'appel système )

Discussions similaires

  1. Problème client-serveur : Err 10054
    Par Chop_chop dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2007, 10h17
  2. Problème client-serveur TELNET.
    Par 0v3rb1t dans le forum Réseau
    Réponses: 5
    Dernier message: 20/05/2007, 17h59
  3. [ServerSocket]Problème communication client-serveur udp sur linux
    Par gdecrouez dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 29/09/2006, 15h59
  4. [C#] Problème client-serveur TCP
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/06/2006, 17h23
  5. [Indy] Client-serveur pour recevoir des flux videos
    Par Nicodemus dans le forum Web & réseau
    Réponses: 7
    Dernier message: 10/10/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo