WSAAsyncSelect

Signaler
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013
-
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
Bonjour, je souhaite savoir comment utiliser cette fonction...je sais il existe plusieurs tutoriaux mais moi je code en C.
Je doi l introduire dans une bouble ?  Les arguments et les valeurs de retour j'ai compri, je me suis rensigne sur msdn ...
j'ai juste besoin de savoir quand j'utilise la fonction...ou exactement..!

l3KTr0 Was HeRe

11 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Tu peux appeler cette fonction juste apres avoir créé ton socket, et il
n'y a pas besoin de boucle puisque ce mechanisme utilise les messages
windows pour la notification des evenements.
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013

Quelqun peut m'expliquer juste le 3eme arguement de cette fonction ?
l3KTr0 Was HeRe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Et bien le 3ème argument te permet de choisir dans quel message de ta fenêtre seront traités les différents message du socket.
Exemple (pour être plus clair ) :
si tu veux que les messages envoyés par le socket (réception de données, fermeture, etc...) soient traités dans le message WM_CREATE (ce qui est débile mais c'est pour l'exemple), et bien dans le 3ème argument tu mets WM_CREATE.
Ensuite dans ta WindowProc, tu récupéreras les messages du socket dans WM_CREATE !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013

je peux lancer plusieurs fois cette fonction pour chaque evenement different? par exemple je veu la recepyion des donnes avec WM_GET, la fermeture avec WM_CLOSE..les nouvelles connections (pour un serveur) avec WM_ACCEPT ..?

l3KTr0 Was HeRe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Je ne crois pas que ça soit possible.
Il me semble que TOUS les messages du socket doivent se traiter dans le même message du style WM_CREATE (très souvent on utilise WM_USER).
Ensuite à l'intérieur de ce message là tu dois traiter chaque sous message si je puis dire.
C'est-à-dire le message qui te dit que tu es connecté,  celui qui te dit tu as reçu des données, etc...

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013

Les sous-messages sont envoyes dans le wParam ? peut tu m'ecrire le switch qui les identifi ?

l3KTr0 Was HeRe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Voilà un exemple d'utilisation pour le traitement des messages :

case WM_USER:
            if(HIWORD(lParam)) Erreur();
            else
            {
                switch(LOWORD(lParam))
                {
                    case FD_ACCEPT:
                        DemandeConnexion();
                    break;
                    case FD_READ:
                        ArriveeDonnees();
                    break;
                    case FD_CLOSE:
                        Fermer();
                    break;
                    case FD_CONNECT:
                        Connecte();
                    break;
                }
            }
            return 0;
        break;

Bien entendu c'est incomplet, dans le sens où il y a des appels de fonctions, tu devras donc adapté à ton usage.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013

ok merci beaucoup...je n ai juste pas compris le
if(HIWORD(lParam)) Erreur();
            else

l3KTr0 Was HeRe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Cela signifie que si les bits de poids fort de lparam ne sont pas tous à zéro, c'est qu'il y a eu une erreur (perte de connexion ou autre) avec le socket.
Après à toi de gérer cette erreur si tu le souhaites.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013

Comment je traite FD_ACCEPT ?

l3KTr0 Was HeRe
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Un conseil, lis des tutoriaux. Parce que là visiblement tu ne sais pas du tout comment ça fonctionne et je ne peux pas te faire la leçon, désolé.
C'est pas ce qui manque les tutoriaux en C sur les sockets.

PS : Google est ton ami !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"