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

Visual C++ Discussion :

Communication entre 2 applications sous VC++6


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Communication entre 2 applications sous VC++6
    Bonjour,

    J'ai besoin de mettre en oeuvre 2 applications (une application qui génèrent des clients multiples et un serveur) qui communiquent entre elles. Etant peu familière du sujet, j'avance pas à pas mais là, je bloque vraiment sur la seconde application.

    La 1ère est une application de type console (qui peut être appelée en ligne de commande plusieurs fois de manière successive) : cette application envoie un message à l'aide d'un SendMessage (WM_COPYDATA) vers l'application "serveur". J'ai utilisé un SendMessage, car l'appli doit attendre le code retour du message (et savoir si tout s'est bien déroulé). Ce point fonctionne bien.

    La 2ème est une application de type CDialog (nommée pompeusement "serveur"). Cette appli tourne en permanence (avec un environnement initialisé) et reçoit bien le message de la première application (avec mise en place de l'interception du message WM_COPYDATA et un OnCopyData).

    => Le pb est que dans ce cas de figure, chaque message est traité l'un après l'autre (ce qui est logique vu ce que j'ai fait mais ce n'est pas le but final).

    => Que dois-je mettre en place dans la 2eme appli dite serveur pour recevoir plusieurs messages indépendants entre eux (de plusieurs applications consoles) et de pouvoir les traiter en parallèle ? Sachant que chaque application console doit pouvoir recevoir un code retour au message envoyé (qui indiquera la bonne exécution ou non)

    Merci d'avance des idées (j'ai vu les thread, des boucles GetMessage, etc... mais le traitement en parallèle et la gestion du code retour me posent problème )

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Bonjour,
    Je ne pense pas que ce soit possible avec les pompes à messages, car il n'y a qu'une seule file de messages. Il est impossible de recevoir un second message avant d'avoir répondu au premier (sauf dans le cas d'une boucle imbriquée, mais dans ce cas il faudrait traiter entièrement le second avant de pouvoir répondre au premier).

    Pour ce genre de communication, je conseillerais plutôt de faire du "serveur" MFC un vrai serveur socket multi-clients. Les CAsyncSocket de MFC sont très bien pour ça, vu qu'il permettent de transformer tout ce qui se passe sur les sockets en événements Windows. Chaque application console pourrait alors se connecter sur le socket du serveur, envoyer une requête et attendre la réponse...

    PS: Par contre, si les applications console n'avaient pas besoin de réponse (ou avaient simplement besoin d'une réponse au début du traitement), on aurait pu faire ça en multi-thread.

    PPS: Une autre possibilité serait d'avoir plusieurs fenêtres sur plusieurs threads, et un thread "distributeur de jetons" qui indiquerait à chaque client (par une requête rapide) sur quelle fenêtre envoyer sa requête longue.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Merci de ces solutions.

    Dernière point cependant : j'ai oublié de mentionner que tout se fait uniquement sur une seule et même machine. Le fait depasser par des sockets ne risque-t-il pas de nuire aux preformances ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je pense que ça ne nuira pas autant que le fait d'utiliser un autre moyen de communication (sauf peut-être les tubes nommés). Simplement, pense à utiliser 127.0.0.1 comme adresse et non pas la vraie IP du poste.

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

Discussions similaires

  1. Communication entre 2 applications (C++/C#)
    Par SLy17 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 07/08/2007, 10h37
  2. Réponses: 2
    Dernier message: 28/03/2007, 11h32
  3. communication entre deux applications
    Par ilhamita dans le forum Langage
    Réponses: 1
    Dernier message: 06/03/2007, 15h28
  4. communication entre 2 applications (exe)
    Par hal9000 dans le forum MFC
    Réponses: 26
    Dernier message: 24/10/2006, 11h47
  5. Communication entre plusieurs applications.
    Par granquet dans le forum Linux
    Réponses: 9
    Dernier message: 01/06/2006, 14h42

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