Un programme de chat

Soyez le premier à donner votre avis sur cette source.

Vue 17 647 fois - Téléchargée 1 964 fois

Description

Voila, y a 2 solutions, un client et un serveur. Ils utilisent tout les deux une petite dll que j'ai fait. Je vous met seulement le code du serveur, le client est dans le Zip... On peut également chater en utilisant Telnet...
Pour utiliser le code ci dossour créez une fenêtre qui s'appèle Form1 avec un bouton Button1 et un Text Box nommé TextBox1.
Le Text Box permet de saisir le port sur lequel il faut écouter et le bouton permet d'activer le serveur.

Source / Exemple :


Public Class Form1
    Inherits System.Windows.Forms.Form
    ' On créé un objet serveur
    Dim WithEvents Serveur As New TcpLibrary.TcpServer()

#Region " Windows Form Designer generated code "
    ' J'ai enlevé le code généré automatiquement
#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' On met le port indiqué dans TextBox1
        Serveur.Port(TextBox1.Text)
        ' Et on écoute sur le port
        Serveur.StartListen()
    End Sub

    ' Le client connecté est passé en argument (Client)
    Private Sub Serveur_Connected(ByVal Client As TcpLibrary.TcpSocket) Handles Serveur.Connected
        ' Quand un client s'est connecté on lui demande son pseudo
        ' Tout les envois doivent se terminer par vbNewLine (retour à la ligne)
        Client.SendData("Bienvenue, veuillez entrer votre Pseudo" & vbNewLine)
    End Sub

    ' Le client qui vient d'envoyer les données est passé en argument (Client)
    Private Sub Serveur_DataArrival(ByVal Client As TcpLibrary.TcpSocket, ByVal Available As Long) Handles Serveur.DataArrival
        ' On regarde si une ligne se terminant par vbNewLine n'est pas disponible, si oui on la stocke dans Tampon
        Dim Tampon As String = Client.GetLine()
        Do While Tampon <> ""
            ' Tant qu'il y en a on les traite
            Traite(Tampon, Client)
            Tampon = Client.GetLine()
        Loop
    End Sub

    ' Traite les données qui viennent d'arriver
    Public Sub Traite(ByVal Data As String, ByVal Client As TcpLibrary.TcpSocket)
        ' La propriété Tag du Client sert à stocker ce que l'on veut, ici on s'en sert pour stocker le pseudo de chaque client
        ' Si l'utilisateur n'a pas de pseudo on lui met celui qu'il vient d'envoyer
        If Client.Tag = "" Then
            ' On enlève le retour à la ligne et on stocke dans Tag
            Client.Tag = Microsoft.VisualBasic.Left(Data, Len(Data) - 2)
            Client.SendData("Votre pseudo est maintenant " & Data)
            SendAtAll(Client.Tag & " est connecté" & vbNewLine)

            ' Si l'utilisateur a un pseudo on envoie son message à tous
        Else
            SendAtAll("<" & Client.Tag & "> " & Data)
        End If
    End Sub

    ' Envoie un message Data a tout les clients connectés
    Public Sub SendAtAll(ByVal Data As String)
        Dim Client As TcpLibrary.TcpSocket
        ' La propriété Clients du serveur est une collection qui contient tout les clients connectés
        ' Avec For Each, on a donc acces à tout les clients connectés
        For Each Client In Serveur.Clients
            Client.SendData(Data)
        Next
    End Sub

    ' On choisit si on veut une nouvelle connection en changant la valeur de Accept
    Private Sub Serveur_Request(ByRef Accept As Boolean) Handles Serveur.Request
        ' Si il y a déjà 4 client connectés on refuse la nouvelle connection
        If Serveur.Clients.Count > 4 Then
            Accept = False
        End If
    End Sub

    ' Le client qui vient de se déconnecter est passé en argument (Client)
    Private Sub Serveur_Disconnected(ByVal Client As TcpLibrary.TcpSocket) Handles Serveur.Disconnected
        ' On indique à tout le monde qu'il s'est déconnecté
        SendAtAll(Client.Tag & " a quitté le chat" & vbNewLine)
    End Sub
End Class

Conclusion :


Voila c'est vraiement un chat de base juste pour que tout le monde comprenne, apres vous pouvez l'améliorer...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
61
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
1 novembre 2011

et comme cela si il y a des arguments a la méthode :

Private Delegate Sub dClient_SocketError(ByVal Number As Integer, ByVal Message As String)
Private Sub Client_SocketError(ByVal Number As Integer, ByVal Message As String) Handles Client.SocketError
If InvokeRequired Then
Me.Invoke(New dClient_SocketError(AddressOf Client_SocketError), New Object() {Number, Message})
Else
TextBox3.AppendText("L'erreur " & Number & " s'est produite : " & Message & vbNewLine)
End If

End Sub
Messages postés
61
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
1 novembre 2011

pour les utilisateur du framework 3 et plus, vous allez devoir modifier la source a tout les endroits que l'objet genere un evenement(EVENT)
Car il ne vien pas du même thread, vous devez l'invoker par le form pour ne pas faire une oppereation inter-thread invalid.
Pour cela, utiliser un delegate sub et invoker le a partir du form :

Private Sub Client_Disconnect() Handles Client.Disconnect
If InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf Client_Disconnect))
Else
TextBox3.AppendText("Le serveur a fermé la connection." & vbNewLine)
End If

End Sub

dans tout ce qui a "Handles Client"
Messages postés
95
Date d'inscription
lundi 11 juin 2007
Statut
Membre
Dernière intervention
9 mai 2013

Bonjour, si je passe le client a un amis et je garde le serveur chez moi, et se que il pourra se connecter dessus si il indique mon IP et le port ?
Merci d'avance.
Messages postés
6
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
1 juin 2009

Pourquoi il y a marqué "*** est connect? "
Pour il n'accepte pas les é ?
Messages postés
1
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
15 avril 2005

Serait-il possible que tu modifies ta DLL pour qu'elle soit utilisable pour faire marcher ce programme sous WinCE?
Afficher les 21 commentaires

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.