[VB.NET] Logiciel avec plusieurs client

Tokyx Messages postés 46 Statut Membre -  
Tokyx Messages postés 46 Statut Membre -
Bonjour,
Je suis en train de développer un logiciel client/serveur sur lequel se connecte plusieurs client, quand j'envoie un message du client au serveur, le serveur reçois le message, mais quand j'envoie un message du serveur a tous les clients, c'est le dernier client connecté qui reçois tout les messages.
J'utilise une boucle, un tableau de EndPoint et la commande BeginSendTo...
Qu'est ce que j'ai loupé ?
Merci, Tokyx.

2 réponses

  1. Tokyx Messages postés 46 Statut Membre 19
     
    Up !
    0
  2. Tokyx Messages postés 46 Statut Membre 19
     
    Voilà les 2 parties du code :

    Demmarage du serveur :

    Public Sub RunServer()
            ServerIsRun = True
            Me.SocketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            Dim ipadress As IPAddress()
            Dim he As IPHostEntry = Dns.GetHostByName(Dns.GetHostName)
            ipadress = he.AddressList
            Me.SocketServer.Bind(New IPEndPoint(ipadress(0), 15))
            Me.SocketServer.Listen(2)
            Me.SocketServer.BeginAccept(AddressOf ConnectionAcceptCallback, Me.SocketServer)
            DisplayMessage("Serveur lancé")
        End Sub
    
        Private Sub ConnectionAcceptCallback(ByVal asyncResult As IAsyncResult)
            Dim obj As String()
            Try
                Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
                If Not (socket.Handle.ToInt32 = -1) Then
                    If ServerIsRun = True Then
                        Me.SocketClient = socket.EndAccept(asyncResult)
                        Me.LocalsocketClientIsShutingDown = False
                        obj = New String() {"Un client s'est connecté"}
                        Me.listBox.Invoke(dlgDisplay, obj)
                        Me.SocketClient.BeginReceive(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveMessageCallback, Me.SocketClient)
                        Dim i As Integer = 0
                        While i < IPList.Length
                            If Not IsNothing(IPList(i)) Then
                                i = i + 1
                            Else
                                IPList(i) = SocketClient.RemoteEndPoint
                                i = i + 1
                                GoTo Brake
                            End If
                        End While
    Brake:
                        Me.SocketServer.BeginAccept(AddressOf ConnectionAcceptCallback, Me.SocketServer)
                    End If
                End If
            Catch ex As SocketException
                obj = New String() {ex.Message}
                Me.listBox.Invoke(dlgDisplay, obj)
            End Try
    
        End Sub


    Et la partie pour envoyer un message :

    Public Sub Send(ByVal message As String)
            If Not (Me.SocketClient Is Nothing) AndAlso Me.SocketClient.Connected Then
                Me.sendbuf = Encoding.ASCII.GetBytes(message)
                ' Utiliser IP end point
                ' Tableau = IPLIST
                Dim i As Integer = 0
                While i < IPList.Length
                    If Not IsNothing(IPList(i)) Then
    
                        Me.SocketClient.BeginSendTo(Me.sendbuf, 0, Me.sendbuf.Length, SocketFlags.None, IPList(i), AddressOf SendCallback, Me.SocketClient)
                        i = i + 1
                    Else
                        i = i + 1
                    End If
                End While
    
            Else
                DisplayMessage("Client non connecté")
            End If
        End Sub
    
        Private Sub SendCallback(ByVal asyncResult As IAsyncResult)
            Dim listdata As String()
            Try
                Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
                Dim send As Integer = socket.EndSend(asyncResult)
                listdata = New String() {"Message envoyé (" + send.ToString() + " octets)"}
                Me.listBox.Invoke(dlgDisplay, listdata)
            Catch ex As SocketException
                listdata = New String() {ex.Message}
                Me.listBox.Invoke(dlgDisplay, listdata)
            End Try
        End Sub
    


    Aider moi ! :(
    0