Problème client

Résolu
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 - 19 août 2011 à 23:35
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 - 22 août 2011 à 16:47
Salut a tous, voila donc j'ai créer un serveur a multiple connexion donc je connecte deux client entre eux sur le serveur et je fait un systeme d'envoie de message sauf que aucun des deux recoie les message de l'autre on recoi ses propre message comment pui-je faire ?

32 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
20 août 2011 à 11:16
Je ne comprends pas ce que tu fabricottes ainsi.

Tu veux envoyer à tous ?
Regarde ce que fait ceci (mets-le par exemple dans un bouton de commande)

MsgBox "j'ai " & Winsock1.Count & " clients sur mon form"
For i = 0 To Winsock1.Count
  MsgBox "un d'index " & i
Next


et sers-t-en pour faire ta cuisine d'envois.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
20 août 2011 à 11:31
Rhoo ...
Bon ===>>
1) pour le cas où tu aurais des "trous"
MsgBox "j'ai " & Winsock1.Count & " clients sur mon form"
For Each Item In Winsock1
  MsgBox "un d'index " & Item.Index
Next


2) Regarde ce que tu as écritr toi-même (en espérant que tu comprends ton proproe code) :
winsock1(index).senddata tets 

Il ne te vient rien à l'idée, même pas envoyer (utilisation d'une boucle toute bête) à chaque index ?
Bon week-end, car je te laisse là, maintenant.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
20 août 2011 à 12:19
Il faut tenir une liste séparée de clients connectés. CF ma source sur le sujet.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
20 août 2011 à 12:20
Bon.
Il ne te reste maintenant que presque rien pour éviter ce genre de situation cocasse :
- que le serveur s'adresse à lui-même un message qu'il a déjà reçu
- qu'un client ne reçoive pas à nouveau le message qu'il a adressé

Ce ne sera là qu'une toute petite gymnastique (plus de l'esprit que du code) !
Une piste :
- une constante pour y mettre l'index du serveur
- une variable générale pour y mettre celui de l'expéditeur d'un message arrivé au serveur
- une expression conditionnelle dans la boucle que tu connais maintenant.

Allez ===>> à toi de t'y mettre (tu en sais assez maintenant pour y parvenir seul)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
20 août 2011 à 19:28
Ouais...
et tu continues avec ce
Winsock1(index).Listen
au chargement de ton form ! ça ne marche, par chance, que parce que ton winsock qui écoute est d'index 0
Mets donc :
Option Explicit

en toute première ligne, juste avant le Load et constate !
Prends d'ailleurs cette habitude (de travailler en Option Explicit, super-recommandé).
Allez ==)=>> remplace par Winsock1(0
), va ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
22 août 2011 à 16:47
Au faite merci encore pour ce code
Option Explicit

sans sa j'aurait eu quelque probleme grace a toi j'ai pu avancé et pas me stoper a cause du transfere de donnée du form a l'autre utile ^^
3
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 00:19
J'ai oublier la moitier mon message je fait un exemple
Client id 1 envoie client id 1
client id 2 envoie client id 2

ce que j'aimerais
client id 1 envoie client id 1 et 2 et 30 si il y a na 30 de connecté ^^
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
20 août 2011 à 00:36
Tu voudrais faire un genre de broadcast ? Ma boule de cristal est ... en pane. Va falloir quelques lignes de code

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 09:21
euh..., Je veut juste que chaque client qui soit connecté au serveur puis recevoire les message de chaque si un envoie salut qu'il envoie a tous sa marche par winsock et oui c'est du vb6
voici les codes :
Client
Private Sub Command1_Click()
Dim txtchat As String
txtchat = Text1.Text
Winsock1.SendData txtchat
End Sub

Private Sub Form_Load()
Winsock1.Connect
End Sub

Private Sub Winsock1_Connect()
Label1.Caption = " connecté"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim txtchat2 As String
Winsock1.GetData txtchat2
Text2.Text = txtchat2
End Sub


Serveur
Dim sck As Integer

Private Sub Form_Load()
Winsock1(0).Listen
End Sub

Private Sub Winsock1_Close(index As Integer)
Winsock1(index).Close
Label1.Caption = Label1.Caption & vbCrLf & Winsock1(index).index & "deconnect" & Winsock1(index).RemoteHostIP
End Sub

Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
sck = sck + 1
Load Winsock1(sck)
Winsock1(sck).Accept requestID
Label1.Caption = Label1.Caption & vbCrLf & sck & " Connect " & Winsock1(sck).RemoteHostIP
End Sub

Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
Dim rsck As String
Winsock1(index).GetData rsck
Winsock1(index).SendData rsck
End Sub
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 09:23
Le seul truc qui cloche dasn le serveur et qui menerve c'est sa
Winsock1(index).GetData rsck
Winsock1(index).SendData rsck

Winsock1(index) car le winsock index = a vous donc la connexion 1 2 3 4 bref voila et ce que je chercher se qu'il envoie exemple le message au connecté 4 et connecté 3 2 1 voila tout ?
c'est possible je pense ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
20 août 2011 à 10:29
Bonjour,
Euh...
Index est est l'index donné à un groupe de contrôles indexés (ici tes contrôles Winsock)
Je ne comprends donc vraiment pas ce que tu veux dire ni comment tu "vois" ton mécanisme.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 11:00
Je vasi essayer d'expliquer un peut mieux je cherche a par exemple deux client donc un client index 1 une autre index 2
je cherche a que quand le client 1 par exemple envoie un message ou autre information au serveur il soit envoyer a tout les client connecté au serveur pas que le client qui a envoyer se message en bref index fait merdé

Car si le client1 envoie une donnée le index egal 1 donc winsock1(1) senddata
donc il envoie le message au client un alors que je cherche a faire un sorte de tchat donc il faut que se message soit envoyer au client 2 aussi et autre exemple
client 1 écrit "salut " winsock1.senddata "salut"
serveur recoie salut
winsock1(index).getdata test
et renvoie la donnée
winsock 1 (index).senddata tets
voici ce que j'aimerais faire
winsock1(client 1,client 2 ,client3 ...).senddata test
En bref que si le cleint et ID 1 que sa envoye aussi au id 2 3 4 5 etc
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 11:12
Voiic un screnne peut etre peut -il vous aidé
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 11:25
Oui je cherche 1 message pour tous .
c'est ce code que je cherche en bref mais qu'il donne au winsock l'index 1 2 3 pour envoyer au client qu'il y a de connecté
un peut comme fait ce logiciel il me dit qu'il y a 3 client donc il utilise index 1 2 3 mais apres comment faire pour le winsock envoie a l'index 1 pui 2 puis 3 ?
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 11:29
LA j'ai un problème c’est que au lieu d’envoyé a chaque client il envoie si il y a 2 connecte il m'envoie deux fois le message a la même personne :p
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 11:40
Ok merci ton aide vais trouvé je pense, je pensez utilise une boucle justement mais le dernier code donnée donnée + 1 a winsock1.count donc sa fait un erreur il y a 4 client et 5 index pour lui
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 12:07
Grand merci a toi voici le code que j'ai fait
For i = 1 To Winsock1.Count - 1
Winsock1(i).SendData rsck
Next
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 12:16
Juste un problème quand un joueur quitte par exemple client 1 vue que la boucle il fait index 1 et sa bug comment je peut empêcher sa ? quand un joueur et deco que l'index soit zapper ou enlever ?
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 13:28
Merci de votre aide et soutien je pense avoir trouvé la solution a mon problème en cas de problème ou autre je reviendrais sur ce poste ^^
0
tonyledragon Messages postés 173 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 13 décembre 2012 1
20 août 2011 à 14:33
Salut voila j'ai pas mal avancé mais il reste encore du boulot voici ce que j'ai fait
Dim sck As Integer

Private Sub Form_Load()
For i = 1 To 10
Load Winsock1(i)
Next i
Winsock1(index).Listen
End Sub

Private Sub Winsock1_Close(index As Integer)
Winsock1(index).Close
List1.AddItem Winsock1(index).index & "deconnect" & Winsock1(index).RemoteHostIP
End Sub

Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)
sck = "1"
If Winsock1(sck).State <> sckConnected Then
Winsock1(sck).Accept requestID
List1.AddItem sck & "connecté"
End If
End Sub

Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
On Error Resume Next
Dim rsck As String
Dim i As Integer
Winsock1(index).GetData rsck
For i = 1 To Winsock1.Count - 1
Winsock1(i).SendData rsck
Next
End Sub


Le lcient 1 se connecte si il et deconnecté le client 2 ce connecte id 1 mais probleme si deux client se connecté en meme temps sa marche pas on dirait que le serveur bloque sur id 1
0