Problème de chat

faresallayl Messages postés 3 Date d'inscription mercredi 29 juin 2011 Statut Membre Dernière intervention 17 juin 2012 - 16 juin 2012 à 23:15
faresallayl Messages postés 3 Date d'inscription mercredi 29 juin 2011 Statut Membre Dernière intervention 17 juin 2012 - 17 juin 2012 à 11:07
Bonjour, j'ai un problème dans l'authentification, lorsque je clique sur valider le serveur indique que le client a quitté.

code client
Imports System.IO, System.Net, System.Net.Sockets

Public Class FrmAuth

    Dim Client As TcpClient
    Dim sWriter As StreamWriter
    Dim pseudonyme As String = ""

    Private Sub BtConnecter_Click(sender As Object, e As EventArgs) Handles BtConnecter.Click
        Client = New TcpClient(TextAdr.Text, CInt(TextPort.Text))
        Client.GetStream.BeginRead(New Byte() {0}, 0, 0, New AsyncCallback(AddressOf Read), Nothing)
        BtAnnuler.Enabled = True
        BtConnecter.Enabled = False
        GroupAuth.Enabled = True
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtAnnuler.Click
        Client.Close()
        Client = Nothing
        BtConnecter.Enabled = True
    End Sub

    Sub Read(ByVal ar As IAsyncResult)
        Try
            MsgBox(New StreamReader(Client.GetStream).ReadLine)
            Client.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
        Catch
            MsgBox("Vous êtes déconnecté du serveur")
            Exit Sub
        End Try
    End Sub

    Private Sub Send(ByVal Str As String)
        Try
            sWriter = New StreamWriter(Client.GetStream)
            sWriter.WriteLine(Str)
            sWriter.Flush()
        Catch
            MsgBox("Erreur d'envoi")
        End Try
    End Sub

    Private Sub BtValider_Click(sender As Object, e As EventArgs) Handles BtValider.Click
        Send("$" & TextLogin.Text & "**" & TextPasswd.Text)
        TextPasswd.Clear()
        GroupChat.Enabled = True
        pseudonyme = TextLogin.Text

    End Sub

    Private Sub TextEnv_KeyDown(sender As Object, e As KeyEventArgs) Handles TextEnv.KeyDown
        If e.KeyCode = Keys.Enter Then
            e.SuppressKeyPress = True
            Send(pseudonyme & " Dit: " & TextEnv.Text)
            TextEnv.Clear()
        End If
    End Sub
End Class


code serveur
Imports System.IO, System.Net, System.Net.Sockets

Public Class FrmServ

    Dim Listener As TcpListener
    Dim Client As TcpClient
    Dim ClientList As New List(Of ChatClient)
    Dim sReader As StreamReader
    Dim cClient As ChatClient

    Sub xLoad() Handles Me.Load
        Listener = New TcpListener(IPAddress.Any, 9999)
        Listener.Start()
        xUpdate("Serveur Démarré", False)
        Listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf AcceptClient), Listener)
    End Sub

    Sub AcceptClient(ByVal ar As IAsyncResult)
        cClient = New ChatClient(Listener.EndAcceptTcpClient(ar))
        AddHandler (cClient.MessageRecieved), AddressOf MessageRecieved
        AddHandler (cClient.ClientExited), AddressOf ClientExited
        ClientList.Add(cClient)
        xUpdate("Nouveau Client rejoint", True)
        Listener.BeginAcceptTcpClient(New AsyncCallback(AddressOf AcceptClient), Listener)
    End Sub

    Sub MessageRecieved(ByVal Str As String)
        If (Str(0).CompareTo("$")) Then
            If (lectureFichier("C:\Users\MOHAMED\Documents\users.txt", Str) = False) Then
                ecritureFichier("C:\Users\MOHAMED\Documents\users.txt", Str)
            End If
            xUpdate(Str, True)
        else
            xUpdate(Str, True)
        End If
    End Sub

    Sub ClientExited(ByVal Client As ChatClient)
        ClientList.Remove(Client)
        xUpdate("Client Sorti", True)
    End Sub

    Delegate Sub _xUpdate(ByVal Str As String, ByVal Relay As Boolean)
    Sub xUpdate(ByVal Str As String, ByVal Relay As Boolean)
        On Error Resume Next
        If InvokeRequired Then
            Invoke(New _xUpdate(AddressOf xUpdate), Str, Relay)
        Else
            TextMsg.AppendText(Str & vbNewLine)
            If Relay Then Send(Str)
        End If
    End Sub

    Private Sub TextEnv_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextEnv.KeyDown
        If e.KeyCode = Keys.Enter Then
            e.SuppressKeyPress = True
            xUpdate("Serveur Dit: " & TextEnv.Text, True)
            TextEnv.Clear()
        End If
    End Sub

    Sub Send(ByVal Str As String)
        For i As Integer = 0 To ClientList.Count - 1
            Try
                ClientList(i).Send(Str)
            Catch
                ClientList.RemoveAt(i)
            End Try
        Next
    End Sub

    Function lectureFichier(ByVal fichier As String, ByVal chaine As String) As Boolean

        Try
            Dim monStreamReader As New StreamReader(fichier)
            Dim ligne As String

            Do
                ligne = monStreamReader.ReadLine
                If (chaine.CompareTo(ligne)) Then
                    monStreamReader.Close()
                    Return True
                End If
            Loop Until ligne Is Nothing
            monStreamReader.Close()
        Catch ex As Exception
            MsgBox("Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel." & vbCrLf & vbCrLf & "Veuillez vérifier l'emplacement : " & fichier, MsgBoxStyle.Critical, "Errueur lors e l'ouverture du fichier conf...")
        End Try
        Return False
    End Function

    Sub ecritureFichier(ByVal fichier As String, ByVal chaine As String)

        Try
            Dim monStreamWriter As StreamWriter = New StreamWriter(fichier)
            monStreamWriter.WriteLine(chaine)
            monStreamWriter.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

End Class

Imports System.Net.Sockets, System.IO

Public Class ChatClient

    Public Event MessageRecieved(ByVal Str As String)
    Public Event ClientExited(ByVal Client As ChatClient)

    Private sWriter As StreamWriter
    Private Client As TcpClient

    Sub New(ByVal xclient As TcpClient)
        Client = xclient
        Client.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf Read, Nothing)
    End Sub

    Private Sub Read()
        Try
            RaiseEvent MessageRecieved(New StreamReader(Client.GetStream).ReadLine)
            Client.GetStream.BeginRead(New Byte() {0}, 0, 0, New AsyncCallback(AddressOf Read), Nothing)
        Catch ex As Exception
            RaiseEvent ClientExited(Me)
        End Try
    End Sub

    Public Sub Send(ByVal Message As String)
        sWriter = New StreamWriter(Client.GetStream)
        sWriter.WriteLine(Message)
        sWriter.Flush()
    End Sub

End Class



Merci d'avance;

2 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
17 juin 2012 à 01:38
Salut,

C'est très aimable à toi de nous poster ton paquet de code en nous précisant qu'il y a une erreur mais pourrais-tu développer un peu plus ? Par exemple nous dire précisément quelle ligne provoque l'erreur en faisant un débogage pas à pas ou en mettant des points d'arrêt. De plus pourrais tu détailler précisément le message d'erreur que tu reçois en faisant un copié-collé.

Tu sais moi aussi j'ai des problèmes avec mes chats


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
faresallayl Messages postés 3 Date d'inscription mercredi 29 juin 2011 Statut Membre Dernière intervention 17 juin 2012
17 juin 2012 à 11:07
C'était un problème de comparaison de deux chaines de caractère, c'est bon maintenant ==> l'utilisation de compareto:
If (Str(0).CompareTo("$")) Then
0
Rejoignez-nous