[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
- Money logiciel - Télécharger - Comptabilité & Facturation
- Logiciel - Guide
- Ce logiciel gratuit répare automatiquement votre PC quand Windows a des problèmes - Guide
- Logiciel de sauvegarde gratuit - Guide
- Logiciel montage vidéo gratuit windows 10 - 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 ! :(