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 :

Fork() et accept()


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 38
    Points
    38
    Par défaut Fork() et accept()
    Bonjour a tous,

    Je suis entrain de développer un serveur en C++ sous Linux. C'est un mini chat dans lequel les utilisateurs se connectent et échangent des messages. J'ai fini l'interface client et il me reste des petits problèmes avec l'interface serveur. J'ai réussi a faire échanger les messages entre le serveur et les clients mais pas les clients avec les clients. En effet, dans mon projet j'utilise la fonction Fork pour qu'elle se charge de traitement des demandes des clients et j'utilse les messages queues pour la communication inter processus. Je sais que je suis entrain de rendre ma tache difficile et que je peux travailler avec les threads au lieu des fork() mais je suis vraiment obligé d'utiliser juste les fork puisque c'est le projet qui me l'impose. Bref, mon probleme est comme suit : Si j'envoie un message au serveur , le serveur doit le renvoyer a tous clients . Je pensais a mettre toutes les connexions dans un tableau puis utiliser le Sendto() pour envoyer les messages a tous les clients. Mais la, mon descripteur de fichier retourné par la fonction accept est le même pour tous les clients et j'arrive pas a résoudre ce problème pourtant j'ai utilisé deux ordinateur avec deux IP diffèrent et le id socket est toujours le même. Résumant tous ca en code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    int main(void)
    {   
     
          memset(&server_addr, 0, sizeof(server_addr));
          server_addr.sin_family      = AF_INET;         
          server_addr.sin_port        = htons(PORT_NUM); 
          server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
     
         // Mon socket  
         server_s = socket(AF_INET, SOCK_STREAM, 0);
         // On fait un bind
          bind(server_s, (struct sockaddr *)&server_addr, sizeof(server_addr));
        // On ecoute
          listen(server_s, MAX_LISTEN);
     
          addr_len = sizeof(client_addr) ;
          while (1 ) { 
     
          client_s  = accept(server_s, (struct sockaddr *)&client_addr,&addr_len);
          // client_s prend tout le temps la valeur 4 et cette valeur est la meme pour tous les clients qui se connectent sur le serveur
     
         server_process = fork() ;
     
          if(server_process == 0 )
          {
          close(server_s) ;
          cout << " Mon socket id : " << client_s<<endl ;
          unsigned int client_id = client_s ;
          // On traite les requetes du client
          commnunicate(client_id) ;
          cout<<"sortir"<<endl;
                exit(0) ;                }
                else
                   cout << "je suis le pere" <<endl ;
     
              close(client_s);
                   }
     
       close(server_s);
       return (0);
     
    }
    J'espère que je trouverai quelqu'un qui peut m'aider a résoudre ce problème!
    J'ai perdu beaucoup de ton sur ca !!

    Je vous remercie beaucoup,

    CV !

    PS : Je serai sur le chat toute la soirée!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 38
    Points
    38
    Par défaut
    Problème résolu !

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

Discussions similaires

  1. [socket & windows & accept]
    Par Magique dans le forum Réseau
    Réponses: 7
    Dernier message: 30/04/2004, 23h34
  2. Gestion de sockets: fonction Accept
    Par keupon dans le forum MFC
    Réponses: 12
    Dernier message: 22/01/2004, 18h48
  3. [Sockets] Timeout sur accept() ?
    Par MikB dans le forum Développement
    Réponses: 2
    Dernier message: 30/12/2003, 17h22
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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