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 :

Aide sur un programme Client Serveur


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    j'ai une petite question sur les types de la MSQ.
    La MSQ du serveur consultation de clé 17 reçoit un message de type 1 et répond avec le type 1 ?
    Pareil en réservation avec MSQ clé 314 et type 2 en émission et réception ?

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par clubmed01
    j'ai une petite question sur les types de la MSQ.
    La MSQ du serveur consultation de clé 17 reçoit un message de type 1 et répond avec le type 1 ?
    Pareil en réservation avec MSQ clé 314 et type 2 en émission et réception ?
    Elle doit répondre avec un autre type pour bien faire la différence entre demande et réponse.

    Le process qui fait les demandes envoi sa demande avec un message type 1.

    Le process chargé de traiter les demandes lit dans la file les message de type 1 ( demande).Puis créer un processus et un tube.

    Le process chargé de consulter la mémoire partagée lit dans le tube puis répond dans la file avec un message de type 2 ( réponse).

    Le process qui fait les demandes consulte sa réponse dans la file des message de type 2.

    Y'a un truc qui cloche ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    J'ai plusieurs difficultés :
    1 - l'énoncé dit :" les processus fils du processus serveur Réservation recouvrent le code hérité du père par un code exécutable contenant les actions de réservation".
    -> je fais donc appel dans le processus fils à un programme externe consult.exe.
    -> j'ai bon ?

    2 - Pour consult.exe, là j'ai du mal à mettre en place les différentes primitives concernant la pose du sémaphore, l'attachement à la mémoire, etc... mais je sais que c'est là que je test nb_places <= nb_dispo.

    Bon, voici le pseudo-code de ce que j'ai déjà fait :

    a - le processus client Consultation :

    Main ( )
    {
    Int msqid ;
    Msqid = msgget (17,0)
    Requete_cons.letype = 1 ;
    Requete_cons.mon_pid = getpid ( ) ;
    Msgsnd (msqid , requete_cons , ___ ) ;
    Msgrcv (msqid , reponse_cons , getpid ( ) ) :
    Exit ( )
    }


    b - le processus client Réservation :

    Main ( )
    {
    Int msqid ;
    Msqid = msgget (314,0)
    Requete_resa.letype = 1 ;
    Requete_resa.mon_pid = getpid ( ) ;
    Msgsnd (msqid , requete_resa , ___ ) ;
    Msgrcv (msqid , reponse_resa , getpid ( ) ) :
    Exit ( )
    }


    c- le processus serveur Consultation:

    # include …
    # define CLE 17
    Main ( )
    {
    Int msqid ;
    int tube[2] ;
    Pid_t retour ;
    Msqid = msgget (17, IPC_CREAT | IPC_EXCL | 0660 )
    Msgrcv (msqid , requete_cons , 1 , ___ ) ;

    Pipe (tube) ; /* ouverture du tube */
    Retour = fork ( ) ;

    If (retour == 0)
    { /* LE FILS */
    close ( tube [1] ) ; /* pas d’écriture sur le tube */
    read ( tube [0] , ……… /* lecture sur le tube */
    execl (« /home/steph/applis/consult.exe », « consult.exe », ___ ) ;
    msgsnd ( msqid , nb_dispo, ____ ) ; /* envoi résultat de consult.exe */
    close ( tube [0] ) ; /* pas de lecture sur le tube */
    exit ( ) ;

    else
    { /* LE PÈRE */
    close ( tube [0] ) ; /* pas de lecture sur le tube */
    write( tube [1], requete_cons, ???) /* écriture requete sur le tube */
    close ( tube [1] ) ;
    wait ( ) ;
    }


    consult.exe

    semget (key_t ,
    - Pose d'un sémaphore sur la mémoire partagée.
    - Attachement à la mémoire partagée
    - Recherche des informations dans la mémoire partagée
    - Dépose du sémaphore
    - Détachement de la mémoire partagée

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    -> je fais donc appel dans le processus fils à un programme externe consult.exe.
    -> j'ai bon ?
    a - Pour recouvrir le code il faut utiliser les fonctions execlp, exec,... C'est a priori ce que tu fais.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     /* LE FILS */ 
    close ( tube [1] ) ; /* pas d’écriture sur le tube */ 
    read ( tube [0] , ……… /* lecture sur le tube */ 
    execl (« /home/steph/applis/consult.exe », « consult.exe », ___ ) ; 
    msgsnd ( msqid , nb_dispo, ____ ) ; /* envoi résultat de consult.exe */ 
    close ( tube [0] ) ; /* pas de lecture sur le tube */ 
    exit ( ) ;
    b-Le code qui est derrière execl ne s'executera jamais sauf si excel échoue, ce que tu ne veux pas. Donc ton envoi dans la file de message dans ce cas ne marchera jamais ( si excelp n'échoue pas).

    c-Il te faut passer en paramétre à consult.exe le descripteur de lecture. ( Récupérable avec les arguments de main argv)


    semget (key_t ,
    - Pose d'un sémaphore sur la mémoire partagée.
    - Attachement à la mémoire partagée
    - Recherche des informations dans la mémoire partagée
    - Dépose du sémaphore
    - Détachement de la mémoire partagée
    d-Il te faut déja creer la semaphore et la mémoire partagée. ( semget et shmget, je te laisse regarder les fonctions qui y sont liées pour s'attacher se détacher poser un semaphore..)

    e-Pour la recherche d'information il faut utiliser un algo. Je te donne le plus simple.

    Lors de l'attachement à une mémoire partagée ( shmat) tu possédes en retour un pointeur sur cette zone.

    Il te suffit de parcourir ta mémoire partagée et de tester les conditions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    while ( i < Nb_Element_Memoire_Partagee) 
    if ( P[i].NomChamp == Recherche.NomChamp && P[i].Champ2==Recherche.Champ2) ...
    f-Normalement tu ne devrais qu'avoir une seule file de message. Il me semble que tu en crées 2 toi. La file de message pour le client consultation doit être la même que le processus serveur consultation.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    WOUHAOU !
    Là ça se gâte, car je n'ai pas vu en cours comment récuperer le résultat d'un exe dans un PS qui l'a lancé ! Dommage, car le sujet nous impose de lancer un exec !
    Tu peux me guider un peu plus ?

    PS : désolé, mais j'ai rien sur les exec...

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par clubmed01
    WOUHAOU !
    No panique

    Là ça se gâte, car je n'ai pas vu en cours comment récuperer le résultat d'un exe dans un PS qui l'a lancé ! Dommage, car le sujet nous impose de lancer un exec !
    Mais effectivement tu fais un exec dans le code que tu montres.

    Quel résultat veux-tu récupérer ? Une fois que tu fais un exec le code est recouvert.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fork();
    if ( FILS ){
     exec( "programme");
     printf("Bonjour")
    }
    Tu vois dans cet exemple le printf("bonjour") ne sera jamais executé. En fait le code du processus fils est recouvert ( remplacé, écrasé) par le code du programme "programme".

    Le programme "programme" n'est ni plus ni moins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argv, char **argv ){ return 0 ;}
    Tu vois ce que je veux dire ?

    PS : désolé, mais j'ai rien sur les exec...
    Tout ce que j'ai :

    C'est cela et je peux même pas consulter les sites je suis derriere un websense :o

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Bon, et bien là... je vois pas trop... désolé. jusque là j'avançais bien grâce à ton aide, mais j'atteinds mes limites. Moi et la prog, c'est pas vraiment une grnade histoire d'amour.
    Je comprends ce que tu veux dire, mais je vois pas bien comment le prog va renvoyer vers le fils le résultat de la consultation ou la réservation.
    On n'avait pas dit que c'était le fils qui renvoyait la réponse dans la MSQ pour le client ????
    j'ai trouvé un truc qui semble parler de la même chose que toi, mais je comprends pas tout... tu peux décrypter pour moi ?

    http://www.lifl.fr/~hauspie/uploads/Hauspie/ds_sys.pdf

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    [quote="clubmed01"]On n'avait pas dit que c'était le fils qui renvoyait la réponse dans la MSQ pour le client ????
    [quote]

    Mais si dans le processus fils tu renvoies le resultat dans la file de message où est le probléme ?

    Peut être que quelqu'un a suivi est pourra nous éclairer un peu plus tous les deux...

    j'ai trouvé un truc qui semble parler de la même chose que toi, mais je comprends pas tout... tu peux décrypter pour moi ?

    http://www.lifl.fr/~hauspie/uploads/Hauspie/ds_sys.pdf
    Tu as pas autre chose que du pdf ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    j'ai transformé chacune des pages en jpg, visibles à l'adresse :
    http://s.berquignol.free.fr/ds_sys_Page_1.jpg
    http://s.berquignol.free.fr/ds_sys_Page_2.jpg
    http://s.berquignol.free.fr/ds_sys_Page_3.jpg
    http://s.berquignol.free.fr/ds_sys_Page_4.jpg
    http://s.berquignol.free.fr/ds_sys_Page_5.jpg
    http://s.berquignol.free.fr/ds_sys_Page_6.jpg

    J'en ai aussi fait un fichier texte:
    http://s.berquignol.free.fr/ds_sys.txt

    J'ai une hypothèse que je souhaite te soumettre :
    Lorsqu'on lance l'execl, le reste du code du fils ne va pas s'executer. Il nous reste donc deux programmes indépendants. Le père et le pgm lancé par l'execl. l'execl peut il envoyer directement le résultat de la requête dans la MSQ à destination du client ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Bon, c'est remis. Merci pour m'avoir guidé tout au long de l'élaboration de ce devoir. je posterai un message avec ma note !!!
    Ah ! La blague ! On verra bien.
    A bientôt.

  11. #11
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par clubmed01
    Bon, c'est remis. Merci pour m'avoir guidé tout au long de l'élaboration de ce devoir. je posterai un message avec ma note !!!
    Ah ! La blague ! On verra bien.
    A bientôt.
    Ca marchait au moins ? Tu as eu le temps de faire des tests ?

    Ca paraît court le temps que l'on te donne quand même 1 semaine pour réaliser tout ? ( conception, programmation et test ?)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 20
    Par défaut
    Si ça marche ? j'en sais rien. j'ai un mac, et il semblerait que les instructions sur mac osx, ne soient pas les mêmes que sur Linux... pas loin, mais pas les mêmes. En plus, j'ai rien pour essayer.
    je m'y mettrai sérieusement quand j'aurai un peu de temps, car j'aimerais bien monter un serveur MAC OSX, et le configurer par lignes de commande. je l'ai installé sur mon mac mini, mais pas le temps, encore, de m'y plonger.
    Quant au délai, ça faisait un peu plus de 3 semaines qu'on a vait le sujet, mais manque de temps pour l'étudier, et manque de connaissances en la matière; dès que j'ai eu le temps, je m'y suis mis à fond !
    Merci encore une fois pour ton aide et ton soutien. Dans notre "promo", les mecs la jouent un peu perso, alors qu'en principe, même s'il s'agit d'un sujet d'étude personnel, nous devons nous soutenir et nous entraider; suivre une formation d'ingénieur, c'est aussi l'occasion de cultiver l'esprit d'équipe et de cohésion. Charge à chacun d'apporter sa pierre !
    Si ça t'intéresse d'avoir mon sujet complet, laisse ton email, et je te l'envoie.

  13. #13
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Si ça marche ? j'en sais rien
    Tu lui as filé quoi a ton professeur les executables les différents projets ?

    T'abuses... La prochaine fois on essayera de le faire ensemble si tu veux du début à la fin si cela t'interesses vraiment.

  14. #14
    Invité de passage
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Par défaut
    J'ai le même type de projet à faire... apparemment le même sujet sur la réservation et je dois sdire que je ne capte pas grand chose non plus en programmation Unix !
    L'UE étant obligatoire, les autres élèves effectivement se la joue perso. Est-ce que vous pourriez m'aider à mon tour sur le projet de réservation ?
    Merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/05/2009, 21h47
  2. build.xml pour un programme client serveur
    Par donyas dans le forum ANT
    Réponses: 5
    Dernier message: 23/12/2006, 00h49
  3. [VB6] Demande d'aide sur un programme !
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/06/2006, 12h49
  4. [Debutant]Conseils sur developement appli Client/Serveur
    Par ahage4x4 dans le forum Général Java
    Réponses: 7
    Dernier message: 21/03/2006, 11h46
  5. architecture d'un programme client/serveur asynchrone (win)
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 06/09/2003, 00h59

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