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

C++ Discussion :

Socket Windows asynchrone


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 40
    Par défaut Socket Windows asynchrone
    Bonjour

    Je cherche un exemple de socket windows asynchrone (WsaAsyncSelect) mais je n'arrive pas a en trouver.

    J'ai déjà un programme tout simple qui fait server tcp,et un client qui s'y connect mais le tout de manière synchrone.
    Hors j'arrive dans un cas de figure, ou je ne sais jamais qui va communiquer en premier, je dois dont passer en asynchrone.

    Est-ce que quelqu'un aurait ça?

    Actuellement, je passe par les API windows (WSA) pensez-vous qu'il est préférable d'utiliser un wrapper / librairie déjà existante?
    Si oui laquelle?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    ton message n'est pas très clair
    je ne sais jamais qui va communiquer en premier,
    Le serveur qui communiquerait en premier au client ? En TCP en plus alors que le client doit s'y connecter via connect ?
    Le serveur doit être lancé en premier, sinon aucune chance de pouvoir s'y connecter.

    je dois dont passer en asynchrone.
    Drôle de conclusion. Peut-être voulais-tu parler de non-bloquant plutôt ?
    Pour mettre un socket non bloquant sous windows il faut utiliser ioctl

    Pour l'utilisation de WSAAsyncSelect spécifiquement, la MSDN est plutôt complète https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 40
    Par défaut
    Bonjour

    Forcément, le serveur démarre, le client s'y connecte.

    Quand je dis que je ne sais pas qui va communiquer en premier, je veux dire par la que je ne sais pas qui va envoyer le message en premier.

    Le serveur peu dire "Voila un message"
    Le client répond "Reçu"

    Et inversement le client peu dire "Voila un message"
    Le serveur répond "Reçu"

    Je ne peux pas dire si c'est le serveur qui va démarre le dialogue de communication ou le client, d'ou ma nécéssité de passer en asynchrone ou non-bloquant en effet.

    J'avais vu pour la doc de WSAAsyncSelect sur msdn mais je me demandais si ce n'etait pas mieux un lib existante et si c'etait le bon moyen de faire sous windows

    Merci d'avance

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Je comprends mieux. C'est donc du non-bloquant.
    je t'aurais bien envoyé vers le cours que je suis en train d'écrire mais... il est en cours d'écriture, la partie serveur pas encore disponible en tant que cours. La partie cliente si, et si tu regardes les samples tu pourras avoir des idées de comment faire puisque du code serveur - un peu sal - y est disponible : http://www.developpez.net/forums/d15...mation-reseau/

    C'est toujours mieux une lib existante, puisqu'elle fait tout le boulot pour toi et possiblement mieux.
    Et oui c'est la bonne manière de faire sous Windows, puisque.. winsock est la lib socket de Windows. Cela dit, select est aussi disponible https://msdn.microsoft.com/en-gb/lib...(v=vs.85).aspx
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 40
    Par défaut
    Ha mince, dommage pour le cours :-p

    Merci pour la réponse.

    Je me doutais que je devais passer par la.

    Sinon dans les libs

    Boost ? Asio ? ce sont les 2 dont j'ai vu que on parlais.

    Par contre Boost ca inclus 20.000 trucs dont je n'ai pas besoin ... c'est un peu con.

    Une autre lib qui fonctionne bien?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Aucune idée, j'ai toujours travaillé avec les sockets en dur sur notre propre lib réseau.
    La seule chose dont tu as besoin c'est de définir un protocole d'échange, comme je le présente ici http://bousk.developpez.com/cours/re...ace-protocole/
    Ca et un chouilla de state machine et tu peux envoyer et recevoir ce que tu veux sans souci.
    TCP est très simple d'utilisation et pour pour implémenter ce genre de chose
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. [Reseau] probleme de socket windows
    Par le novice2 dans le forum Réseau
    Réponses: 4
    Dernier message: 24/07/2007, 19h13
  2. [C++][Socket] Evenement asynchrone
    Par rosewood00 dans le forum C++
    Réponses: 2
    Dernier message: 10/12/2006, 15h05
  3. Socket windows/Linux
    Par yodaime dans le forum C++
    Réponses: 7
    Dernier message: 11/04/2006, 16h33
  4. [SOCKET] Windows et linux
    Par Gmrinfo dans le forum C++
    Réponses: 3
    Dernier message: 21/02/2006, 22h44
  5. [socket & windows & accept]
    Par Magique dans le forum Réseau
    Réponses: 7
    Dernier message: 30/04/2004, 23h34

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