[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.


A voir également:

2 réponses

Tokyx Messages postés 46 Statut Membre 19
 
Up !
0
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