Erreur d'éxécution '40006': État de connexion ou de protocole erroné pour la tra

Résolu
Zappam Messages postés 8 Date d'inscription dimanche 9 avril 2006 Statut Membre Dernière intervention 18 octobre 2007 - 16 juin 2006 à 23:39
007antar21 Messages postés 1 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 24 juillet 2007 - 24 juil. 2007 à 18:02
Bonjour, voici mon problème:

J'ai ce petit bout de code dans ma source:

Private Sub Command1_click()
 Timer1.Enabled = True
End Sub

Private Sub Form1_load()
 i = 0
End Sub

Private Sub Timer1_timer() 'Timer1 a une intervalle de 1000, enabled:false
 i = i + 1
 Winsock1(i).Close
 Winsock1(i).Connect "xx.xx.xx.xx", xx
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Index = i
Winsock1(i).GetData dat
..d'autre code pas important ici
End Sub

Quand j'arrive pour tester mon programme, j'arrive à me connecter avec le Winsock1(1), mais je n'y arrive pas pour Winsock1(2). Quand je me connecte au serveur, je recois un paquet automatiquement (ce qui est normal).

La ligne en rouge ci-haut est en surbrillance et je recois l'erreur suivante (avec Winsock1(2).GetData dat):
Erreur d'éxécution '40006':
État de connexion ou de protocole erroné pour la transaction ou la requête requise

Comment dois-je régler mon problème?

Merci de votre aide,
Zappam

2 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 juin 2006 à 00:27
salut,
index = i ? bizarre çà.

bref, le multi-sockets est un peut particulier.
en fait, côté serveur, il faut utiliser un socket (disons le 0) rien que pour dispatcher sur les autres.
attention à dat (qui n'est pas déclaré).
pour des raisons évidentes de groupe de contrôles, ton buffer doit être un tableau(NOMDRE_DE_WINSOCKS)

et pour l'erreur précise, tout laisse à croire que le sock2 pas encore connecté lors de ta lecture de data.
++
PCPT   [AFCK]
3
007antar21 Messages postés 1 Date d'inscription mercredi 22 novembre 2006 Statut Membre Dernière intervention 24 juillet 2007
24 juil. 2007 à 18:02
non pas comme ça !!!
il faut que tu declares ton buffer en declaration comme ça
par example
dim buffer(0 to 500) as string
en data arrival de ton winsock tu met comme ça
Index = i
Winsock1(i).GetData dat c ton erreur c ça index i -----------> error  il faut le i index c pas index = iwinsock(index).getdata buffer(index) avec le maximum des socket 500 àa veut dire winsock.ubound 500
0
Rejoignez-nous