Comment une procédure peut-elle vérifier continuellement l'état d'un winsock ?

Signaler
Messages postés
24
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2007
-
Messages postés
24
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2007
-
Bonjour, étant débutant un peu autodidacte en vb6, quelque chose m'echappe complètement et m'handicape.

Prenons un exemple concret si vous le voulez bien.
Je suis en cours de création d'un chat client/serveur. J'utilise un composant winsock. Mon timer suit l'avancé de la connexion du client au serveur et inversement.

J'aimerai maintenant executer une procédure si et seulement si mon composant winsock arrive à l'état 7 (SckConnected). Cela peut vous paraitre basique mais tant mieux, moi ça m'échappe !

Mon idée premiere était bien sur de faire une procédure du style:
If Wserveur.State = 7 Then
(hop je glisse mes procédures)
End if

Mais cette procédure s'execute avec les autres et comme il voit que mon winsock n'est pas en état 7 il passe a autre chose et n'y revient jamais. Comment faire pour qu'il verifie tout le temps ? Un autre timer ? je bloque.. merci de votre aide.

3 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Salut,

Dans un autre langage, une bonne solution aurait été le multi-threading, mais qui est hélas impossible en VB6.
Dans ce cas il te faut alors utiliser l'instruction DoEvents dans une boucle "infinie".
Par exemple tu pourrais imaginer une structure comme ceci :

While Wserveur.State <> 7
  DoEvents()
  'Opérations à effectuer tant qu'il n'est pas connecté
Wend
'Wserveur.State = 7
Opération à faire lorsqu'il se connecte

DoEvents permet au processus d'exécuter les message windows en attente pour ton application (comme par exemple un click sur un bouton, un déplacement de fenêtre, plein de choses...) et donc de l'empêcher de "freezer" pendant ta boucle.

Sinon l'idée d'utiliser un autre timer ne me semble pas particulièrement mauvaise non plus, à voir.

<hr size="2" width="100%" />Julien.
Messages postés
104
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
30 novembre 2009

mouais julien...  tres moyen comme solution!

faire un DoEvents te bouffera tout ton CPU!!!

en VB6 le mieux est de mettre un timer, selon moi, toutes les 100 ms qui vérifie l'état du winsock!

if winsock.state <> 7 then .....

l'état #7 veux dire que ton winsock est connecté!

ne pas oublier de laisser le winsock en mode TCP/IP et non en UDP!

bonne prog!
Messages postés
24
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2007

Merci de votre aide je pense que vos solutions vont m'aider :)
Affaire à suivre ^-^