Server MultiClient .Net

Résolu
Guillamue06 Messages postés 158 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 - 7 oct. 2011 à 20:37
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 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...

7 réponses

NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
8 oct. 2011 à 14:09
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
3
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
7 oct. 2011 à 21:39
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
0
Guillamue06 Messages postés 158 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 4
7 oct. 2011 à 22:37
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 ?
0
Guillamue06 Messages postés 158 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 4
7 oct. 2011 à 22:50
Mouarf, même avec une autre class l'appli se ferme....

Je pense utiliser Winsock du coup -_-'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
7 oct. 2011 à 23:06
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
0
Guillamue06 Messages postés 158 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 4
8 oct. 2011 à 00:15
Je vais matter la source et reprendre mon code pas a pas en envoyant des Msgbox pour voir comment sa se passe psq...
0
Guillamue06 Messages postés 158 Date d'inscription dimanche 18 avril 2004 Statut Membre Dernière intervention 11 juillet 2022 4
8 oct. 2011 à 09:16
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)
0