Reso

drpsico Messages postés 208 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 15 août 2005 - 12 déc. 2004 à 17:13
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 12 déc. 2004 à 23:38
bonjour g un probleme avec une conection que gésseille d'établir voila ma source

serveur :
Option Explicit

Private Sub Form_Load()
Label1.Caption = Winsock(0).LocalHostName
Label2.Caption = Winsock(0).LocalIP
Winsock(0).LocalPort = 1007
List1.AddItem ("A l'écoute du port:" & Winsock(0).LocalPort)
Winsock(0).Listen
Label3 = "0"
End Sub

Private Sub Winsock_ConnectionRequest(index As Integer, ByVal requestID As Long)
Dim Message As String
Message = "ID de la connexion " & requestID & " de " & Winsock(index).RemoteHostIP
List1.AddItem (Message)
index = index + 1
Load Winsock(index)
Winsock(index).Accept requestID
Label3.Caption = index
End Sub

Private Sub Winsock_Close(index As Integer)
List1.AddItem ("Déconnexion de: " & Winsock(index).RemoteHostIP)
index = index - 1
Label3.Caption = index
End Sub

le client :
Option Explicit

Private Sub Connexion_Click()
If Winsock.State <> sckConnected Then
Winsock.RemoteHost = "192.168.0.2"
Winsock.RemotePort = 1007
Winsock.Connect
Else
Winsock.Close
End If
End Sub

Private Sub Quitter_Click()
Winsock.Close
End
End Sub

Private Sub Recherche_Click()
If Text1.Text <> "" Then
If Winsock.State = sckConnected Then
Winsock.SendData Text1.Text
Else
MsgBox "Non connecté au serveur"
End If
Else
MsgBox "Veuillez tapez le nom!"
End If
End Sub

Private Sub Timer1_Timer()
If Winsock.State = 0 Then
Label1 = "Fermé"
Connexion.Caption = "Connexion"
End If
If Winsock.State = 6 Then
Label1 = "Connexion en cours"
End If
If Winsock.State = 7 Then
Label1 = "Connecté"
Connexion.Caption = "Deconnexion"
End If
If Winsock.State = 8 Then
Label1 = "Fin de connexion avec l'application serveur"
Winsock.Close
End If
If Winsock.State = 9 Then
Winsock.Close
End If
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim strData
Winsock.GetData strData, vbString
Text2.Text = strData
End Sub

alors qd je me connecte la premier foi avec le client sa marche pui je me deconnecte et si je me reconnecte ben il me di objet deja charger alors si quelqu'un c merci de me dir


==psicofox6@hotmail.com==

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 déc. 2004 à 17:46
Salut drpsico
Simplement à cause de la procédure Winsock_ConnectionRequest
En effet, seul le winsock (WS) en écoute peut recevoir cette demande.
Donc, cette procédure ne se déclenchera que pour le WS d'index 0
Donc en faisant 'Index = Index + 1', tu trouveras toujours 1 (même si la modification d'un paramètre fourni poar le système n'est pas recommandé).
If faut donc gérer l'incrémentation des Index extérieurement, avec un variable déclarée pour toute la forme (dans Déclaration)
Dim CompteurClient As Integer

Vala
Jack
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)
0
drpsico Messages postés 208 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 15 août 2005
12 déc. 2004 à 18:36
slt vu que je suis debut tu pour me donner un exemple pck je comprend pas index qd tu te deconect ben il redevien 0 donc je voi pas pk sa marche pas


==psicofox6@hotmail.com==
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 déc. 2004 à 20:20
re
Non, Index (fourni par la Sub) est l'index du controle qui reçoit l'évènement.
Cet évènement n'existe qu'en mode Listen.
Donc le seul composant WS de ta collection a être en mode Listen, c'est WS(0), donc Index = 0 toujours

-1- Dans déclaration :
Dim CompteurWS As Integer
-2- Dans Winsock_ConnectionRequest :
CompteurWS = CompteurWS + 1
Load Winsock(CompteurWS)
Winsock(CompteurWS).Accept requestID
Label3.Caption = CompteurWS

Vala
Jack
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 déc. 2004 à 20:23
Non et oui :
C'est vrai que ton code pourrait marcher, MAIS :
- une fois que tu as fait une fois un Load(N°), il reste chargé, donc un nouveau Load(N°) provoque une erreur.
- Il ne fonctionnerait pas avec 2 clients

Vala
Jack
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drpsico Messages postés 208 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 15 août 2005
12 déc. 2004 à 20:33
re g fai se que tu ma di sa marche mes sa bug un pe apres la desieme connection

Option Explicit
Dim CompteurWS As Integer

Private Sub Command1_Click()
Winsock(1).SendData Text2.Text
End Sub

Private Sub Form_Load()
Label1.Caption = Winsock(0).LocalHostName
Label2.Caption = Winsock(0).LocalIP
Winsock(0).LocalPort = 1007
List1.AddItem ("A l'écoute du port:" & Winsock(0).LocalPort)
Winsock(0).Listen
Label3 = "0"
End Sub

Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim Message As String

Message = "ID de la connexion " & requestID & " de " & Winsock(Index).RemoteHostIP
List1.AddItem (Message)
CompteurWS = CompteurWS + 1
Load Winsock(CompteurWS)
Winsock(CompteurWS).Accept requestID
Label3.Caption = CompteurWS
End Sub

Private Sub Winsock_Close(Index As Integer)
List1.AddItem ("Déconnexion de: " & Winsock(Index).RemoteHostIP)
Index = Index - 1
Label3.Caption = Index
End Sub

Private Sub Winsock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData
Winsock(Index).GetData strData, vbString
Text1.Text = strData
End Sub

si tu a msn je pe tenvoyer la source



==psicofox6@hotmail.com==
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 déc. 2004 à 23:38
Non, ça devrait marcher.
Juste des trucs :
- Dans Command1_Click : Tu t'adresses au controle n° 1 alors que celui-ci n'est valable qu'à la 1ere connexion. (si tu fais une déco et reco, le nouveau WS aura l'index 2, pas 1)
- Dans WS_Close : Tu fais un 'Index = Index - 1' qui ne sert à rien

En fait, il faut que tu arrives à bien comprendre ce que tu as programmé. Tu verras ensuite qu'il faut affiner la technique et qu'il faut mémoriser 'qui est connecté à quoi' pour pouvoir lui envoyer qqchose.
Amélioration par lesquels il va falloir passer :
- Gérer les duplications de WS : Quand un client se close, il faudrait, soit faire un Unload du WS concerné, soit mémoriser qu'il est chargé et qu"il ne sert plus.
- Gérer l'identification des clients : actuellement, plusieurs clients peuvent accéder au serveur. Par contre, tu n'es pas capable de savoir qui est le client : Quand tu voudras lui écrire, il te faudra choisir le n° (WS(N°).SendData ...) et là, pour l'instant, tu ne peux pas le savoir. Interresse toi à la propriété Tag du WS : Dedans, tu peux mettre du texte : peut-être un moyen simple de savoir si le WS est utilisé ou pas, et par qui.

Pour info, parmi mes sources, tu trouveras un 'Chat sans serveur' : Dedans, j'utilise la technique du chargement dynamique de WS, comme toi, + une gestion d'un tableau d'informations rattachées au numéro d'index du controle. C'est un peu complexe, mais bien commenté.

Vala
Jack
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)
0
Rejoignez-nous