Petit exemple de chat avec winsock

Soyez le premier à donner votre avis sur cette source.

Vue 12 453 fois - Téléchargée 1 285 fois

Description

Bon comme le dit le titre, voici un petit exemple d'un chat entre client et serveur via winsock.
Soyez indulgent, c'est l'un de mes premier code! n_n'
Ben le code est banal, on choisis son pseudo et on envoie son texte. On peut aussi choisir le port de connexion depuis le serveur.
Voila voila ...

A+

Source / Exemple :


'Côté client

Private Sub Command1_Click()
If Command1.Caption = "Se &connecter" Then
Winsock.Close
Winsock.Connect Text1.Text, Text2.Text
End If
If Command1.Caption = "Se &déconnecter" Then
Winsock.Close
Winsock.Listen
Command1.Caption = "Se &connecter"
Label3.Caption = "Déconnecté"
Form1.Height = 2150
End If
End Sub

Private Sub Command2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Winsock.SendData "pseudo" & Text3.Text
RTB.Text = RTB.Text + Text3.Text + " : " + Text4.Text + vbCrLf + "------------------------------------------------------------------------------------" + vbCrLf
End Sub

Private Sub Winsock_Close()
Winsock.Close
Winsock.Listen
Command1.Caption = "Se &connecter"
Label3.Caption = "Déconnecté"
Form1.Height = 2150
End Sub
Private Sub Winsock_Connect()
Winsock.SendData "Connecté"
Label3.Caption = "Connecté"
Command1.Caption = "Se &déconnecter"
Form1.Height = 13000
End Sub
Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
Winsock.Close
Winsock.Accept requestID
End Sub
Private Sub Form_Load()
Form1.Height = 2150
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock.GetData data
If Left(data, 2) = "ok" Then
Winsock.SendData "texte" & Text4.Text
Text4.Text = ""
End If

If Left(data, 6) = "pseudo" Then
RTB.Text = RTB.Text + Right(data, Len(data) - 6) + " : "
Winsock.SendData "ok"
End If
If Left(data, 5) = "texte" Then
RTB.Text = RTB.Text + Right(data, Len(data) - 5) + vbCrLf + "------------------------------------------------------------------------------------" + vbCrLf
End If
End Sub

'Côté serveur

Private Sub Command2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Winsock.SendData "pseudo" & Text1.Text
RTB.Text = RTB.Text + Text1.Text + " : " + Text2.Text + vbCrLf + "------------------------------------------------------------------------------------" + vbCrLf
End Sub

Private Sub port_change_Click()
Port = InputBox("Indiquer le nouveau port de connection (9999 par défaut) :", "Changement de port", "9999")
Winsock.Close
Winsock.LocalPort = Val(Port)
Winsock.Listen
End Sub

Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
Winsock.Close
Winsock.Accept requestID
End Sub
Private Sub Form_Load()
Form1.Height = 690
Form1.Width = 6945
Winsock.Close
Winsock.Listen
End Sub
Private Sub Winsock_Close()
Winsock.Close
Winsock.Listen
etat.Caption = "Etat : Déconnecté"
Form1.Height = 690
Form1.Width = 6945
End Sub
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock.GetData data
If Left(data, 8) = "Connecté" Then
etat.Caption = "Etat : Connecté"
Form1.Height = 11580
Form1.Width = 6945
End If

If Left(data, 2) = "ok" Then
Winsock.SendData "texte" & Text2.Text
Text2.Text = ""
End If

If Left(data, 6) = "pseudo" Then
RTB.Text = RTB.Text + Right(data, Len(data) - 6) + " : "
Winsock.SendData "ok"
End If
If Left(data, 5) = "texte" Then
RTB.Text = RTB.Text + Right(data, Len(data) - 5) + vbCrLf + "------------------------------------------------------------------------------------" + vbCrLf
End If
End Sub

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
114
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
4 décembre 2009

OK merci pour tout ! Je vais encore retravailler un peu tout sa ^^
A+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

un petit peu léger et quelques améliorations possibles....

déjà (comme indiqué par econs sur ta précédente source) pense à toujours mettre OPTION EXPLICIT pour être certain d'avoir toutes tes variables déclarées

ensuite une chose à savoir est que les paquets ne sont pas forcément envoyés comme on le croit, c'est à dire que tu vas envoyer "bonjour", mais l'autre personne peut très bien recevoir "bon" puis "jour"

évidemment en réseau la cnx est trop rapide pour ces coupures mais sur de grandes chaînes c'est très souvent le cas.
aussi pour corriger ce point, 2 choses à mettre en oeuvre :

1) pour t'assurer que le paquet part, un petit DOEVENTS après chaque envoi (surtout si l'utilisateur tape rapidement)

2) mettre en place un buffer. en fait tu ajoutes une sorte de POINTFINAL à tes chaînes (par code évidemment) et à la réception, tant que ce pointfinal n'est pas arrivé, tu reçois sans afficher

voir pour çà la déclaration STATIC

et un point supplémentaire est d'avoir le client et le serveur dans le même projet, te permettant ainsi d'être client ou serveur dans avoir plusieurs exe à balader...

reste ensuite à améliorer le tout avec un interface, des options, des smileys et sons....
++ bon courage

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.