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

Framework .NET Discussion :

événement sur les socket


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut événement sur les socket
    Bonjour,

    Je dois faire une communication entre deux programmes. J'utilise les sockets pour réaliser cette communication.

    Je voulais savoir si il existe un moyen de créer un événement lorsqu'une donnée est prête à être lue sur le socket. J'aimerais utiliser les événements pour ne pas mettre en attente tout le programme pour ça. J'ai fais une recherche sur internet, mais je n'ai rien trouvé de précis dans le Framework 2.0. Je pensais réaliser un Thread dédié uniquement au traitement de cette communication et utiliser la fonction "poll" pour savoir quand les données sont prêtes à être lues sur le socket.

    Qu'en pensez-vous? Existe-t-il effectivement un moyen de créer un événement pour cela ?

    Merci de votre aide.

    J'utilise Visual Studio 2005 language VC++

    Frédéric

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Je n'ai pas la réponse sous la main, mais un truc m'interpelle : tu travailles en C++ managé, je suppose (sinon tu n'aurais pas posé la question sur le forum dotNet).

    Quelle est la raison du choix "socket" pour ton IPC, ici ? en effet, il existe dans le framework (et dans le système) une panoplie de moyen de bien plus haut niveau, en général plus faciles de mise en oeuvre, au prix d'une moindre performance (mais la différence est souvent minime). Tu as des contraintes particulières qui imposent le choix de cette technique d'IPC ? (dont l'usage se fait de plus en plus rare, du moins pour des couches applicatives).

  3. #3
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    Bonjour,

    Effectivement, je travail en C++ managé. J'ai un soft qui doit communiquer avec un automate programmable via le protocol TCP/IP. Cet automate m'envoie une commande (Trigger). Lorsque je reçois ce trigger, j'effectue une série de fonction dans mon soft et je lui renvoie une commande OK ou PAS OK.
    Etant donné que je n'ai pas l'automate sous la main pour tester, le fournisseur m'a donné un petit programme de simulation de l'automate qui envoie ce trigger et qui recois la commande OK ou PAS OK. Ce programme envoie le trigger sur le protocol TCP/IP via un n° de port bien précis.
    Donc moi, j'ai décidé (selon mes connaissances dans ce domaine) d'utiliser la class System::Net::Socket pour recevoir le trigger et renvoyer la commande OK et PAS OK.
    Maintenant, cela fonctionne parfaitement si mon prgramme se met en attente de la réception du trigger. Mais je trouve que cette méthode n'est pas propre car elle bloc mon programme. Je voudrais plutot travailler sur un événement lancer lorsqu'une donnée vient d'etre reçue. C'est pour cela que je me posait la question si il existait une méthode pour faire cela.
    Mais je viens d'utiliser un Thread qui effectue cette attente de réception et cela marche très bien.
    Pour des utilisations futures, je vais probablement travailler sur des événements que sur des Threads.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Merci pour ta réponse. En effet dans ton cas l'usage des sockets s'impose.

    Tu peux bien sur utiliser des threads auxiliaires, mais y ajouter l'usage des sockets en mode asynchrone (méthode BeginReceive, BeginSendTo).

    Ainsi, tu invoque un BeginReceive et la méthode de callback sera appelée quand des données seront présentes.

    Ceci n'est pas exclusif de l'usage du multithreading qui est même conseillé surtout si tu communiques avec plusieurs robots en même temps.

    Pour cela, je te suggère de jeter un oeil à la classe ThreadPool.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Par défaut
    Merci beaucoup pour cette réponse, je vais donc diriger mes recherches dans ce sens.

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

Discussions similaires

  1. événement sur les Sockets
    Par michel_frederic dans le forum C++
    Réponses: 2
    Dernier message: 20/12/2007, 10h39
  2. Encore une petite question sur les sockets...
    Par damien99 dans le forum MFC
    Réponses: 4
    Dernier message: 15/02/2006, 14h22
  3. [WinSock] Question sur les sockets (accept)
    Par Grey dans le forum MFC
    Réponses: 3
    Dernier message: 09/01/2006, 11h37
  4. Cours sur les sockets
    Par sorry60 dans le forum Réseau
    Réponses: 8
    Dernier message: 05/11/2005, 14h19
  5. Questionsssss sur les sockets?
    Par Nino dans le forum Développement
    Réponses: 5
    Dernier message: 01/04/2003, 21h11

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