cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 2013
-
18 sept. 2010 à 23:18
Utilisateur anonyme -
19 sept. 2010 à 16:40
bonsoir
j'ai créé un jeu avec un client et serveur avec des winsocks,ça fonctionne mais!! lorsque le serveur envoi des données attends un accusé réception du client par ce petit code:
Public Sub SeverEnvoi(ByVal strdata As String)
Dim W As Winsock
Dim NJoueur As Byte
For Each W In frm_plateau.ServerWscK
If (W.Index > 0) Then
If W.State = 7 Then
NJoueur = CByte(Val(W.Tag))
While OK(NJoueur) = False 'tant que le client n'a pas aqquité la réception de l'envoi précédent du Winsock index
DoEvents
Wend
End If
End If
Next
For Each W In frm_plateau.ServerWscK
If (W.Index > 0) Then
If W.State = 7 Then
NJoueur = W.Tag
Debug.Print " serveurWsck " & W.Index & " envoi " & strdata
OK(NJoueur) = False 'pour attendre l'aquittement de la réception de l'envoi
frm_plateau.Timer_Deconnect.Enabled = True 'si le client n'aquitte pas la connection sera coupée
Debug.Print " serveurWsck " & W.Index & " est bloqué OK(" & NJoueur & ") est " & OK(NJoueur)
W.SendData strdata 'envoi des données vers le client (index) par le winsock index
End If
End If
Next
si un client ne fait d'acquittement un timer est déclenché, au bout du temps le timer coupe la connection en utilisant la méthode close
Private Sub Timer_Deconnect_Timer()
Dim i As Byte
For i = 1 To NbreJoueurConnecté
If OK(i) = False Then
frm_plateau.ServerWscK(i).Close
DoEvents
End If
Next i
End Sub
mais apparemment la méthode close ne déclenche pas l'événement "Public Sub ServerWsck_Close(Numwsck As Integer)"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 sept. 2010 à 00:19
Salut
Pas vraiment compris de quel côté était ce code ...
Je pense que si c'est le programme A qui fait le .Close, seule la procédure _Close du côté B se déclenchera, pas celle du côté A.
C'est confirmé par l'aide de VB que tu aurais dû consulter.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_marco62118
Messages postés176Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention 1 avril 20131 19 sept. 2010 à 10:21
bonjour, merci pour cette prompte réponse
le prog est sur serveur.
Ok la méthode .close déclenche l'évènement distant _close()!!!
mais comme sur le serveur, lorsque je suis dans la boucle d'attente, le serveur n'a pas l'air de voir la déconnexion du distant!
est ce que j'ai le "droit" dans le timer à la place du .close (pour le distant) de déclencher directement l'évènement _close() du winsock du serveur, comme si j'avais reçu une fermeture du distant.