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 :

Programmer files de messages


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut Programmer files de messages
    Bonjour,
    je dois simuler une situation client-serveur en utilisant les messages queues mais je ne sais pas comment je peux commencer...
    le but c'est de créer une espèce de jeu de golf.. et les joueurs doivent s'inscrire au serveur. pour pouvoir jouer..
    si j'aimerai au moins pouvoir faire communiquer les jouerus (client) et les serveurs.
    les joueurs seront identifies par leur process ID.
    on m'a dit qu'on pourrais créer un serveur iteratif? est ce possible?
    je ne sais vraiment par ou commencer.. j'ai deja lu msgget et sais quel fichiers inclure..
    merci.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    je ne sais vraiment par ou commencer.. j'ai deja lu msgget et sais quel fichiers inclure..
    As tu déjà fait quelque chose?

    Comme pour tous les projets, papier crayon et tu dessines globalement comment doivent interragir les éléments de ton programme ensemble.

    En gros qu'est ce que doit pouvoir faire un client, un serveur ...

    le but c'est de créer une espèce de jeu de golf.. et les joueurs doivent s'inscrire au serveur.
    En gros, tu lances le serveur qui crée toutes les ressources IPC (puisque tu utlises msg***).

    Dès qu'un client est lancé, tu envoie un message à destination du serveur (à toi de bien remplir le champ destinatire de msgsend), le serveur enregistre le message et renvoie éventuellement un message au client pour lui dire qu'il est connecté (ou pas, sa connection peut être refusée, on ne sait jamais...).

    Ensuite,reste à toi de voir quels sont les autres actions à effectuer.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    merci pour ta réponse, elle est bienvenue.
    j'ai quelques exemples que j'ai pris d'internet,
    mais ce que j'ai déja imagine, mis sur papier est le suivant.
    un serveur itératif est lance avec mise en place des messages queues. le client, est crée dans une autre console (alt -fx)
    des qu'il se connecte il envoie son PID au serveur qui prend ce pid pour identifier un client aka joueur de facon unique et inéquivoque.
    et il devrait enregistrer cela dans un fichier imaginan dans un tableau de 18 cases une case par trou, chaque cellule de tableau a deux champs pid, et nombre de points; un client reste sur un 'trou' aussi longtemps que il n'as pas dit qu'il a termine; pour faciliter la chose je peux dire qu'il termine un trou lorsque il soumet les points.
    les problemes que je dois gérer de facon prioritaire est la communication, client serveur.. il faut au moins que je puisse envoyer le pid au serveur et qu'il le prenne; et aussi, il faut que j'utilise des signaux? pour eviter que deux jouers soient dans le meme trou? je m'explique si je lance le serveur dans tty1 et un client en tty2 et un autre en tty3, il faut que celui qui est en tty3 puisse etre dans le trou, et l'autre, doive attendre..
    ils doivent pas jouer, c'est la gestion.. car a la fin de dois faire un classement..
    voila; c'est cela l'esquellete de ce que je veux faire.
    je connais les focntions getpid(), et tout... mais pour le reste je suis dans le trouble.
    tout conseil est le bienvenu.
    merci beaucoup

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    des qu'il se connecte il envoie son PID au serveur
    C'est exactement ça.

    et il devrait enregistrer cela dans un fichier imaginan dans un tableau de 18 cases une case par trou
    Tu peux peut être avoir deux tableaux : un qui indique qui est dans le trou numéro n et un deuxième qui indique pour chaque client son nombre de points.

    Le premier peut être un fichier mais le mieux, c'est une mémoire partagée. Le deuxième est interne au serveur et n'a pas besoin d'être partagé.

    un client reste sur un 'trou' aussi longtemps que il n'as pas dit qu'il a termine; pour faciliter la chose je peux dire qu'il termine un trou lorsque il soumet les points.
    Qui s'occupe alors de changer de trou ? Que se passe t'il lorsque tu es au trou 8, qui tu as fini et qu'il y a quelqu'un au trou 9 ?

    les problemes que je dois gérer de facon prioritaire est la communication, client serveur.. il faut au moins que je puisse envoyer le pid au serveur et qu'il le prenne;
    le serveur crée la file de mesage, la clée IPC ..., il a un ID fixe. Le client lorsqu'il se connecte, récupère la clée IPC et envoie un message au serveur avec msgsnd.

    et aussi, il faut que j'utilise des signaux? pour eviter que deux jouers soient dans le meme trou?
    Utilise des mutexs sur la mémoire partagée : lorsqu'un client veut aller dans un trou, il prend le mutex, s'il n'y a personne, il continuera, s'il y a quelqu'un, il va attendre.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    qui s'occupe alors de changer de trou ? Que se passe t'il lorsque tu es au trou 8, qui tu as fini et qu'il y a quelqu'un au trou 9 ?
    normalement c'est le travail du serveur qui dois dire ok tu peux aller ou non, tu ne peux pas y aller.

    est il possible d'utiliser de la memoire partagée et des files de messages en même temps, je croyais qu'on devrait choisir un moyen de communication ou l'autre.

    merci.

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    est il possible d'utiliser de la memoire partagée et des files de messages en même temps
    Heureusement que oui !

Discussions similaires

  1. programmation c sous unix , les files de messages
    Par élève_ingénieur dans le forum Linux
    Réponses: 4
    Dernier message: 07/12/2009, 22h43
  2. Créer plusieures file de message différentes
    Par progamer54 dans le forum Linux
    Réponses: 6
    Dernier message: 06/04/2006, 15h36
  3. Réponses: 8
    Dernier message: 09/02/2006, 18h51
  4. IPC : Files de messages et accès exclusif
    Par thomasvst dans le forum C
    Réponses: 2
    Dernier message: 07/12/2005, 09h47
  5. Réponses: 9
    Dernier message: 03/10/2005, 14h28

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