Problème client

[Résolu]
Signaler
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
-
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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 ^^
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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é ^^
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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 ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
Voiic un screnne peut etre peut -il vous aidé
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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 ?
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
Grand merci a toi voici le code que j'ai fait
For i = 1 To Winsock1.Count - 1
Winsock1(i).SendData rsck
Next
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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 ?
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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 ^^
Messages postés
173
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
13 décembre 2012
1
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