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 :

[sockets] échanger des msg en meme temps entre client serveur


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [sockets] échanger des msg en meme temps entre client serveur
    Salut,
    J'ai fait un petit exemple de client/serveur (avec Winsock2 sous Windows) qui permet d'échangé des messages entre le client et le serveur.

    Simplement voilà:
    Le client ne peut envoyer un message au serveur que si le serveur a répondu au msg du client , et c'est idem pour le serveur . Càd : qu'il échange des message à tour de rôle.

    Et je me demande ci en peut faire en sorte que le client et le serveur peuvent envoyé des msg tout les 2 , càd en même temps .
    J’ai essayé mais je n'arrive pas à le faire . Il faut toujours attendre la réponse du client pour que le serveur puisse envoyé , et ainsi de suit ....
    Est-ce qu'on peut le faire...

    merci pour votre aide.

    ps: si vous voulez voire le code actuel demender .

  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
    Tu peux travailler en asynchrone.
    L'inconvénient, c'est si tu tentes d'envoyer de grandes données (en non-bloquant, tu ne peux pas vraiment envoyéer de données plus grandes que le buffer d'émission (souvent 8ko)).

    Pour travailler en Asynchrone sous Win32, si tu es habitué aux fenêtres/boîtes de dialogue, tu peux utiliser la fonction WSAAsyncSelect(). Avec cette fonction, dès qu'il se passe un truc sur le socket, la fenêtre reçoit un message.
    Là, tu peux envoyer quand tu veux, et recevoir quand il le faut...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    euh
    Je n'est pas tout compris là

    un petit exemple sera le bien venu

    merci

  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
    Déjà, est-ce que tu as déjà programmé en fenêtre sous Win32 ?
    Sinon, c'est pas la peine d'aller plus loin dans cette branche de l'asynchrone ---> Tourne-toi plutôt vers la fonction select().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Médinoc
    Déjà, est-ce que tu as déjà programmé en fenêtre sous Win32 ?
    Sinon, c'est pas la peine d'aller plus loin dans cette branche de l'asynchrone ---> Tourne-toi plutôt vers la fonction select().
    Un exemple avec la fonction select() sera le bienvenu .
    car je ne vois pas trop comment l'utilisé .

    merci bien.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Bad_Day
    Un exemple avec la fonction select() sera le bienvenu
    Le web est rempli d'exemples d'utilisation de select(). Google est ton ami...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Après une brève recherche sur les forums:
    http://man.developpez.com/man2/select.2.php
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Le web est rempli d'exemples d'utilisation de select(). Google est ton ami...
    Oui mais le probléme c'est comment l'utiliser avec le point de vu de mon probléme en hau.

  9. #9
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    http://man.developpez.com/man2/select.2.php#L8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdio.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <unistd.h>
     
    int
    main(void)
    {
     while (1) {    
        fd_set rfds;
        struct timeval tv;
        int retval;
     
        /* Surveiller stdin (fd 0) en attente d'entrées */
        FD_ZERO(&rfds);
        FD_SET(0, &rfds);
        /* Pendant 5 secondes maxi */
        tv.tv_sec = 5;
        tv.tv_usec = 0;
     
        retval = select(1, &rfds, NULL, NULL, &tv);
        /* Considérer tv comme indéfini maintenant ! */
     
        if (retval) {
            printf("Données disponibles maintenant\n");
            /* lire le message reçu */
        }
        else {
            printf("Pas de données depuis 5 secondes\n");
            /* envoyer un message au pair (ou faire autre chose...) */
        }
     
     }
     
     return (0);
    }
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

Discussions similaires

  1. Rafraichissement des données sql serveur entre clients /serveur
    Par ROMILA dans le forum Bases de données
    Réponses: 16
    Dernier message: 03/03/2012, 15h56
  2. [GTW/Hibernate/Gilead] problème d'utilisation des 3 en meme temps
    Par <romain/> dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 31/03/2009, 15h35
  3. Réponses: 8
    Dernier message: 30/11/2006, 12h26
  4. Réponses: 6
    Dernier message: 02/10/2006, 17h57
  5. Réponses: 4
    Dernier message: 09/05/2006, 11h21

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