Comment faire un chat multiuser!

Messages postés
24
Date d'inscription
vendredi 30 août 2002
Statut
Membre
Dernière intervention
1 octobre 2004
-
Messages postés
36
Date d'inscription
mardi 3 décembre 2002
Statut
Membre
Dernière intervention
24 juin 2004
-
voila j'ai fais un chat mais il ne peut que communiquer a 2.Je voudrais donc savoir comment ce connecter a plusieur sur la partie serveur du chat.j'utilise tcp.donc si vous avez un petit script bien expliquer mettais le dans la reponse. :big)
(Mais je ne veut pas du blabla comme j'ai vu souvent et qui n'a aucun rapport avec la question posée) :approve)

je tiens a dire merci d'avance au nombreuse personnes qui vont me laisser un message.

7 réponses

Messages postés
22
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
7 décembre 2002

Si tu utilises Winsock pour la connection, sur ta partie serveur il faut 2 control winsock. 1 pour detecter si quelqu'un veu se connecter (en mode listen), dans ce cas tu cree un nouveau crontrol winsock avec le deuxieme (Load Winsock2(i)), et tu effectue la connection de ton client avec ce nouveau control.
J'ai fait un OCX pour chat va voir les sources ca pourra peut etre t'aider....
http://www.vbfrance.com/article.aspx?Val=6242

-Dok
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
12
non, 1 winsock suffit :)

la connection:

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intmax = intmax + 1
Load Winsock1(intmax)
Winsock1(intmax).LocalPort = 30002
Winsock1(intmax).Accept requestID
endif

La reception de donnée:

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim tmp As String

Winsock1(Index).GetData tmp
If IsServeur Then
For I = 1 To intmax
If Winsock1(I).State = sckConnected Then
Winsock1(I).SendData tmp
End If
Next
else
'Gestion de ce qu'il se passe chez le client
End If

apres, a toi de gerer la deconnexion, les erreurs....
Messages postés
24
Date d'inscription
vendredi 30 août 2002
Statut
Membre
Dernière intervention
1 octobre 2004

voila le code source du serveur que j'ai fait. le prob c que quand j'envois un message au client(j'en est pris que un pour l'instant)il y a un bug dexecution 4006.je pense que c dans la partie ok_click mais je ne suis pas sur pouvais vous me dire ce qui ne va pas.(merci a BasicInstinct de m'avoir aidé)

Private intMax As Long
Private Sub form_load()
intMax = 0
Winsock(0).Close
Winsock(0).LocalPort = Form1.Text2.Text
Winsock(0).Listen
End Sub

Private Sub ok_Click()
crlf = Chr$(13) + Chr$(10)
Winsock(Index).SendData crlf & "<" & Form1.Text1.Text & ">" & Text1.Text
RichTextBox1.SelText = crlf & "<" & Form1.Text1.Text & ">" & Text1.Text
Text1.Text = ""
End Sub
Private Sub winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load Winsock(intMax)
Winsock(intMax).LocalPort = 30002
Winsock(intMax).Accept requestID
End If
End Sub
Private Sub winsock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim data As String
'Winsock(Index).GetData data
Winsock(Index).GetData data
If IsServeur Then 'peut tu m'expliquer a quoi sert cette condition stp
For I = 1 To intMax
If Winsock(I).State = sckConnected Then
Winsock(I).SendData data
End If
Next
Else
'Gestion de ce qu'il se passe chez le client
End If
RichTextBox1.SelText = data
End Sub

Private Sub quitter_Click()
End
End Sub
Private Sub form_unload(cancel As Integer)
Unload Form1
Unload Me
End Sub

merci a tous ceux qui reponde
Messages postés
32
Date d'inscription
vendredi 23 août 2002
Statut
Membre
Dernière intervention
7 mars 2003

Adieu p'tit

j'y conné pas grand chose en winsock mais à mon avis dans ta fonction ok_click Index = null

A r'vi pa...

Partager ce qu'on sait c'est laisser une trace de notre passage...
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
12
dans ok_click()
remplace
Winsock(Index).SendData crlf & "<" & Form1.Text1.Text & ">" & Text1.Text
par
Winsock(IntMax).SendData crlf & "<" & Form1.Text1.Text & ">" & Text1.Text

IsServeur me permet de gerer le client et le serveur sur la meme appli avec 1 seul winsock
le serveur renvoie a tous les clients les données qu'il recoit (en general du moins)

plutot que de faire une boucle de I à Intmax,
il faut créer un tableau de client (avec gestion des connection, deconnection, plantage) et juste boucler sur le nombre de client connecté
par exemple tu peut mettre dans ton tableau:
Pseudo
IP
NumeroWinsock
HeureDeConnection
HeureDeDernierMessage
Droits (admin, user, coAdmin.....)
.....
Messages postés
36
Date d'inscription
mardi 3 décembre 2002
Statut
Membre
Dernière intervention
24 juin 2004

AraXeen

j'ai laisser une source sur le site
Messages postés
36
Date d'inscription
mardi 3 décembre 2002
Statut
Membre
Dernière intervention
24 juin 2004

Peut-être
Winsock(0).LocalPort = Form1.Text2.Text
remplacé par
Winsock(0).LocalPort = Val(Form1.Text2.Text)

AraXeen