[VB.NET] Logiciel avec plusieurs client
Tokyx
Messages postés
46
Statut
Membre
-
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.
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:
- [VB.NET] Logiciel avec plusieurs client
- Logiciel - Guide
- Ce logiciel gratuit répare automatiquement votre PC quand Windows a des problèmes - Guide
- Money logiciel - Télécharger - Comptabilité & Facturation
- Ce petit logiciel gratuit optimise complètement votre PC en quelques clics - Guide
- Logiciel de sauvegarde gratuit - Guide
2 réponses
Voilà les 2 parties du code :
Demmarage du serveur :
Et la partie pour envoyer un message :
Aider moi ! :(
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 ! :(