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

POSIX C Discussion :

Communication inter - processus


Sujet :

POSIX C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Communication inter - processus
    Bonjour à tous,
    Voilà j'ai construit un modèle client-serveur utilisant une file de message.

    Le client en demandant une requête envoie un message correspondant qui est aussitôt intercepté par le serveur qui s'occupe d'effectuer le traitement associé.

    Le système fonctionne très bien sauf à certains moments (aléatoires) le serveur traite plusieurs fois le même message.
    A quoi cela peut-il être dû? Merci d'avance.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Juste une idée comme cela, pourquoi pas un bug dans le client qui envoie aléatoirement plusieurs fois le même message ?

    Est ce qu'il y a des traces quand le client poste et quand le serveur prélève ?

    Est ce qu'une fois que le message est prélevé par le serveur et traité, la structure/classe qui a reçu le message est réinitialisée/remise à zéro avant tout nouveau prélevement ?

    Ce aléatoirement, c'est fréquent comment ? 1X par jour/heure/minute ?

    Est ce que tu sais détecter dans le server une duplication de message ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    J'ai encore passé pas mal de temps à essayer de comprendre ... en vain

    Du côté du client, je ne pense pas que ce soit lui qui soit mise en cause.
    Pour le vérifier, j'ai mis dans client.c les intructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*Envoi de la question dans la file de question*/
      if (msgsnd(msgId,&message,sizeof(message),0) == -1){
        perror("Erreur lors de l'envoi de la question");
        exit(1);
      } else {
        printf("\n Traitement en cours ... \n");
      }
    Je n'ai bien qu'un "Traitement en cours" sur le terminal où je lance le client.

    Du côté du serveur par contre, j'ai effectué de même. Dans mon fichier serveur.c j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (msgrcv(msgId,&message,sizeof(message),0,0) == -1){
    	perror("Erreur lors de la reception du message\n");
    	exit(1);
      } else {
        printf("recuperation du message \n");
      }
    Et à la fin du traitement du message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /*Envoi de la reponse dans la file de messages */
          printf("   - Requete traitee - \n");
          if (msgsnd(msgId,&message,sizeof(message),0) == -1){
    	perror("Erreur lors de l'envoi de la reponse");
    	exit(1);
          }
    Je lance plusieurs fois des messages par l'intermédiaire du client. Et au bout d'un certain nombre de fois (quelque fois il n'y a pas de pb ou d'autres cela arrive dès la première), le serveur traite plusieurs choix le message et les indications comme "Recuperation du message" et "Requete traitée" apparaissent plusieurs fois.
    Cela m'est génant puisque ds mon travail, le serveur est lui-même associé à "une impression" d'un fichier associé au message et donc cette impression se fait plusieurs fois.

    A noter que dans le terminal où je lance le client, j'obtiens :
    Tache effectuee avec succes (ce que je fais écrire qd le client reçoit une reponse). Mais suivie immédiatement de :
    *** stack smashing detected ***: ./client terminated
    Abandon(core dumped)

    J'espère avoir été la plus claire possible.
    Merci d'avance

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par issa2910 Voir le message
    J'ai encore passé pas mal de temps à essayer de comprendre ... en vain



    J'espère avoir été la plus claire possible.
    Merci d'avance
    tous ces symptomes laissent penser que c'est le code qui gère la file de messages qui contient un bug…

  5. #5
    Membre régulier Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Points : 92
    Points
    92
    Par défaut
    Salut, dans les morceaux de code que tu montres il n'y a rien de spécialement
    faux, juste faire attention que sizeof(message) donne uniquement
    la taille des données envoyés (sans le type).
    Il faudrait que tu montres un peu plus de code.
    Bye,

Discussions similaires

  1. Communication inter-processus et pause()
    Par jsebfranck dans le forum POSIX
    Réponses: 10
    Dernier message: 14/02/2008, 14h52
  2. [windows] Communication inter-processus
    Par litbos dans le forum Windows
    Réponses: 6
    Dernier message: 16/01/2007, 09h13
  3. [Perl] communication Inter-Processus
    Par MarneusCalgarXP dans le forum Langage
    Réponses: 15
    Dernier message: 14/08/2006, 22h43
  4. [débutant] Communication inter-processus
    Par tooney dans le forum C
    Réponses: 3
    Dernier message: 29/12/2005, 20h48
  5. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 09h55

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