Server MultiClient .Net [Résolu]

Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
- - Dernière réponse : NHenry
Messages postés
14504
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
- 8 oct. 2011 à 14:09
Bonjour, je reviens du langage python et ça fait longtemps que je n'est pas fait du VB.NET

J'essai de faire un server multi client en .NET puis je le test avec un client en python :

Je ne sais pas si c'est bien de faire ainsi mais voici le début de mon serveur, Le problème est que des que le client se connecte et envoi un message, le programme se ferme sans même de message d'erreur :

Imports System.Text
Imports System.Net
Imports System.Net.Sockets


Public Class Form1
    Public Sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Public Connexion As New List(Of Socket)
    Public buff(1024) As Byte

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Sck.Bind(New IPEndPoint(IPAddress.Parse("192.168.0.4"), 256))
        Sck.Listen(1)
        CreationSocket()
    End Sub

    Private Sub CreationSocket()
        Connexion.Add(Sck)
        Connexion(Connexion.Count - 1).BeginAccept(AddressOf AccepteConnexion, Sck)
    End Sub

    Private Sub AccepteConnexion(ByVal asyncResult As IAsyncResult)
        Connexion(Connexion.Count - 1) = Connexion(Connexion.Count - 1).EndAccept(asyncResult)
        CreationSocket()
    End Sub

    Private Sub MessageRecu(ByVal asyncResult As IAsyncResult)
        For i As Integer = 0 To Connexion.Count
            Dim recu As Integer = Connexion(i).EndReceive(asyncResult)
            If recu <> "" Then
                Chat.Text = Chat.Text & vbCrLf & Encoding.ASCII.GetString(buff)
            End If
        Next i
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            For i As Integer = 0 To Connexion.Count
                Connexion(i).BeginReceive(buff, 0, buff.Length, SocketFlags.None, AddressOf MessageRecu, Connexion(i))
            Next i
        Catch
        End Try
    End Sub

End Class


Une personne a une idée ?

Pareil si je veut informé en inscrivant dans le textbox "Chat" VB.net me parle de Thread (je sais se que c'est) et ne veut rien inscrire...
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
14504
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
131
3
Merci
Bonjour,

Je comprend ta remarque, après, il y a aussi pas mal de possibilité qui découle de cette implémentation.

Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14504
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
131
0
Merci
Bonjour,

Dans la mesure du possible, faire une classe pour les clients ainsi qu'un classe pour l'écouteur te permet de faciliter la gestion des sockets.

En plus, en utilisant les threads, tu pourra avoir des écoutes bloquantes, plus faciles à gérer.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
3
0
Merci
bonjour, si je comprend bien t'as solution, c'est parce que j'ai qu'une seul class que l'appli se ferme une fois la dernière fonction appelé ?

Mais je croyais que la GUI maintenant le programme ouvert ?
Commenter la réponse de Guillamue06
Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
3
0
Merci
Mouarf, même avec une autre class l'appli se ferme....

Je pense utiliser Winsock du coup -_-'
Commenter la réponse de Guillamue06
Messages postés
14504
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juillet 2019
131
0
Merci
Bonjour,

As-tu essayé en pas à pas ?
Je ne vois pas d'instruction de fermeture de la form, le comportement est donc étrange.

Regardes aussi :
http://www.vbfrance.com/code.aspx?ID=36083

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
3
0
Merci
Je vais matter la source et reprendre mon code pas a pas en envoyant des Msgbox pour voir comment sa se passe psq...
Commenter la réponse de Guillamue06
Messages postés
158
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2018
3
0
Merci
Bon bah du coup j'ai complètement changé de méthode j'utilise TCPClient et TCPListen (je savais pas que ça existé)

C'est plus simple mais je suis quand même un peut déçu du côté "démerde toi" au niveau des données reçus et à envoyer :

                Dim Stream As NetworkStream = LstClient(i).GetStream
                Dim bytes(LstClient(i).ReceiveBufferSize) As Byte
                Dim Numbytes As Integer = Stream.Read(bytes, 0, CInt(LstClient(i).ReceiveBufferSize))
                Dim Recu As String = Encoding.ASCII.GetString(bytes, 0, Numbytes)


Tous ça pour recevoir un "flux" de données.

Comme dit plus haut je reviens de python est en python :

Recu Sck.recv(1024) et voila c'est fini)
Commenter la réponse de Guillamue06