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

Linux Discussion :

Probleme de lecture sur socket


Sujet :

Linux

  1. #1
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut Probleme de lecture sur socket
    Salut à vous cher developpeur.
    Je suis en train de développer une appli de chat. Le principe est 1 client écrit,il envoie son message au serveur qui lui l'envoie aux autres clients (un chat koi ). Mon problème est à la réception des msg coté client.
    Supposons que les clients A,B,C,D sont en train de chatter. Si A envoie un msg, les autres le reçoivent mais il ne s'affiche pas. Je suis obligé de taper des <enter> (\n) pour qu'il affiche reçu de l'autre client. J'ai essayé de mettre des fflush(NULL) partout mais ca marche toujours pas.
    Voici le code du thread qui reçoit les requetes du client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void* rcv_request(void *arg){
      request rep;
     
      while(1){
        blank_message(&rep);
     
        fflush(NULL);
     
        if(read(sock,&rep,sizeof(rep)) == -1){
          fprintf(stderr,"read rcv_request error\n");
          pthread_exit((void *) arg);
        }
        sem_wait(&mutex);
        fprintf(stdout,"<%s>:",rep.pseudo);
        fputs(rep.message,stdout);
        fprintf(stdout,"\n");
        sem_post(&mutex);
     
      }
     
     
        pthread_exit((void *)0);
    }

    Quelqu'un pourrait-il m'aider ?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Il faut mettre ton fflush après tes printf, sinon évidemment il ne sert à rien.

  3. #3
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Salut et merci pour ta réponse,
    j'ai rajouté le fflush apres le printf("\n"), ca marche toujours pas.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Comment sais-tu que tu reçois bien les données ? Comment sais-tu que tu fais bien tes printf, et que tu ne restes pas bloqué sur ton sem_wait ?

  5. #5
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Bah en fait, je reçois bien les données puisque quand je tape <Entree> (entre 1 a n fois) sur le terminal, il m'affiche les msg des autres clients. Le sémaphore est juste pour ne pas avoir de conflit d'affichage .

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Mais qu'est-ce qui te dit que ce n'est pas un problème d'envoie plutôt que de réception ? Est-ce que tu fflush ta socket après avoir écrit dessus ?

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par matafan Voir le message
    Mais qu'est-ce qui te dit que ce n'est pas un problème d'envoie plutôt que de réception ? Est-ce que tu fflush ta socket après avoir écrit dessus ?
    Oui je le fais. En fait, je crois avoir trouvé. C'est mon sémaphore là. Le problème est quand il recevait un msg, il restait bloqué sur le sem_wait. Je l'avais mis là, c'est pour qu'il y'ait de conflit à l'affichage (en fait je ne voulais pas pendant que j'ecrive que je reçois un msg en mm temps). , ce que je trouve bizarre. Bon je vais essayer de trouver un moyen pour régler ce prob.

    Merci qd meme de ton aide !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.2] probleme de lecture sur serveur unix
    Par bsidy1 dans le forum Langage
    Réponses: 7
    Dernier message: 24/04/2012, 19h09
  2. [PERL] Lecture bufferisé sur socket avec sysread
    Par yum_yum dans le forum Langage
    Réponses: 0
    Dernier message: 02/09/2008, 15h01
  3. lecture sur une socket
    Par fattouch_squall dans le forum Développement
    Réponses: 7
    Dernier message: 22/12/2007, 13h57
  4. probleme de byte et de lecture via socket
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 29/07/2007, 09h43
  5. Probleme de lecture sur un generic
    Par volivi dans le forum VB.NET
    Réponses: 5
    Dernier message: 08/05/2007, 16h40

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