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 :

Problème de variable partagée


Sujet :

Réseau C

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Problème de variable partagée
    Bonjour,

    Pour les besoin d'un projet je dois posséder une variable booléenne partagée entre un client et un serveur afin de les synchroniser. Ces deux programmes sont strictement différents et sont décrits dans deux fichiers C différents. En revanche, ils possèdent un header en commun. En fait je voudrai qu'un client puisse écrire dans cette variable et le serveur seulement lire dedans. Savez-vous à l'aide de quels outils je pourrai réaliser cette tâche ? Merci d'avance à ceux qui pourront me filer un coup de main


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par nicolas66
    Bonjour,

    Pour les besoin d'un projet je dois posséder une variable booléenne partagée entre un client et un serveur afin de les synchroniser. Ces deux programmes sont strictement différents et sont décrits dans deux fichiers C différents. En revanche, ils possèdent un header en commun. En fait je voudrai qu'un client puisse écrire dans cette variable et le serveur seulement lire dedans. Savez-vous à l'aide de quels outils je pourrai réaliser cette tâche ? Merci d'avance à ceux qui pourront me filer un coup de main


    Nico.
    Si ce sont 2 processus différents, il n'est pas possible qu'ils accedent à la meme variable...

    Tu peux eventuellement passer par un fichier.

    Pour les IPC je ne sais pas si ca marche avec 2 programmes totalement differents.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Ok je vais regarder du côté des IPC. En fait le problème de synchronisation que je rencontre est très simple : mon serveur peut se trouver sur le point d'envoyer des données au client alors que le client n'est pas encore en phase de récéption du message. Du coup le serveur continue et le client attend .

    J'ai pensé que l'utilisation d'un booléen commun serait une bonne idée. Le client initialiserait la variable à 0. Le serveur devrait attendre que le booléen serait à 0. Lorsque le client est sur le point de récéptionner les données, il met le booléen à 1 et avertit donc le serveur qu'il peut lui envoyer des données.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par nicolas66
    Ok je vais regarder du côté des IPC. En fait le problème de synchronisation que je rencontre est très simple : mon serveur peut se trouver sur le point d'envoyer des données au client alors que le client n'est pas encore en phase de récéption du message. Du coup le serveur continue et le client attend .

    J'ai pensé que l'utilisation d'un booléen commun serait une bonne idée. Le client initialiserait la variable à 0. Le serveur devrait attendre que le booléen serait à 0. Lorsque le client est sur le point de récéptionner les données, il change l'état du booléen et avertit donc le serveur qui peut envoyer les données au client.
    Ok, mais si c'est un client serveur, pourquoi ne pas faire envoye un tit message par le client a destination du serveur disant "Je suis prêt tu peux tout balancer"
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Points : 91
    Points
    91
    Par défaut
    Je pense que tu peux faire ca en utilisant un segment de memoire partage

  6. #6
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Je ne pense pas que ca soit possible d'envoyer tout directement au client. En fait mon projet consiste en un client qui envoie un fichier C à un serveur pour en demander un fichier objet. Voici les différentes étapes :

    - Le client vérifie que le fichier C existe, qu'il y a un contenu et l'envoie au serveur par une socket

    - Le serveur réceptionne le fichier puis le sauvegarde dans un fichier temporaire et résoud les dépendances (via la commande 'gcc -MM').

    S'il n'y a pas de headers nécessaires à la compilation, le serveur tente de compile le fichier C. S'il y a des erreurs, il les envoie au client, sinon il envoie le fichier objet.

    S'il y a de headers nécessaires à la compilation, il doit les demander au client. Dans ce
    cas, pour tous les headers, le serveur demande au client de lui envoyer son contenu. Lorsque le client reçoit ce type de message, il demande à l'utilisateur de saisir le nom du header et l'envoie au serveur.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  7. #7
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Le problème du segment de mémoire partagée c'est qu'elle est utilisable uniquement si on connaît l'identifiant associé. Or mon serveur ne le connaît pas sauf si le client lui envoie. Si je lui envoie, je devrai le faire par un fichier ou un tube nommé.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Rien n'empêche le client et le serveur d'utiliser un identifiant connu d'eux 2 en utilisant la même clé key_t.
    Voir le man de shmctl(2) comme à l'adresse suivante

    http://www.linux-kheops.com/doc/man/...an2/index.html

    ftok permet aussi de générer des clés vi un fichier.

  9. #9
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Question importante: ton client et ton serveur tournent-ils sur la même machine?
    Si oui=> IPC (shmget, ....)
    Si non=> communication réseau, par exemple socket

  10. #10
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par rererere
    Rien n'empêche le client et le serveur d'utiliser un identifiant connu d'eux 2 en utilisant la même clé key_t.
    Voir le man de shmctl(2) comme à l'adresse suivante

    http://www.linux-kheops.com/doc/man/...an2/index.html

    ftok permet aussi de générer des clés vi un fichier.
    J'y ai pensé mais dans ce cas, il est nécessaire que le client et le serveur se communiquent la clé qui permet d'accéder au segment de mémoire partagée.

    Citation Envoyé par joellel
    Question importante: ton client et ton serveur tournent-ils sur la même machine?
    Si oui=> IPC (shmget, ....)
    Si non=> communication réseau, par exemple socket
    A priori, mon client et mon serveur peuvent ne pas tourner sur la même machine. En réalité, j'ai résolu le problème en améliorant la synchronisation du client / serveur avec davantage d'échanges de messages entre les deux (pas d'envoi ou de réception de messages successifs). Merci quand même à tlm


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

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

Discussions similaires

  1. [CR 9] Problème export Excel sous etat variable partagée
    Par hubertfabien dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 13/01/2011, 15h56
  2. Problème d'accès à une variable partagée
    Par sebac dans le forum Général Java
    Réponses: 1
    Dernier message: 04/09/2009, 12h11
  3. [CR XI] Problème dans l'utilisation des variables partagées
    Par sep_ghis dans le forum Formules
    Réponses: 14
    Dernier message: 03/07/2008, 16h32
  4. [LabView 8.0] Problème de variables partagées
    Par chris83160 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 25/05/2008, 11h47
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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