IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] Client/Serveur Socket


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut [VB.NET] Client/Serveur Socket
    Bonjour,

    Voila j'ai un projet dans mon entreprise. Celui-ci est le suivant, j'ai une application cliente avec un simple bouton(connecter). A l'action de celui-ci ,il envoie le mot de passe et login de l'utilisateur au serveur qui possède toute les méthodes pour récupérer toute les informations de l'utilisateur utilisateur. Donc le serveur doit renvoyer un objet nommé utilisateur avec comme paramètre (id,login,username,adressemail). Pour réaliser ceci j'ai créer 4 classes :
    - ClientTCP
    -ServerTcp
    -Paquet : pour récuperer l'objet et l'envoyer
    -PaquetManager

    Voici mes classes :

    ClientTcp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
     Dim MonSocketClient As Socket
        Dim MonThread As Thread
     
        Public Function Connect() As String
     
            Dim reponse As String = String.Empty
            Dim AddresseServeur As String = ""
            Dim numeroPort As Integer = 0
            Dim user As String = ""
            Dim password As String = ""
            Try
     
                'Initialise Socket 
                MonSocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
     
                'On récupère les informations de connexion
                Dim liste As New List(Of String)
                liste = RecupereInformationConnecion(AddresseServeur, numeroPort, user, password)
                AddresseServeur = liste.ElementAt(0)
                numeroPort = CType(liste.ElementAt(1), Integer)
                user = liste.ElementAt(2)
                password = liste.ElementAt(3)
     
                Console.WriteLine(AddresseServeur & "        " & numeroPort)
     
                'Entre les informations de connexion
                Dim monEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(AddresseServeur), numeroPort)
                Console.WriteLine(AddresseServeur & "        " & numeroPort)
                MonSocketClient.Connect(monEP)
     
                'Envoie le Password et User
                Dim u As Boolean = True
                u = SendConnect(user + ";" + password)
                If u = True Then
                    reponse = " Fin de connexion "
                Else
                    reponse = " Erreur lros de l'envoi"
                End If
                ThreadLecture(AddresseServeur, numeroPort)
            Catch ex As Exception
                reponse = "Erreur de connexion"
                Console.WriteLine(ex.Message)
            End Try
     
            Console .WriteLine (reponse )
     
            Return reponse
        End Function
     
        Private Function RecupereInformationConnecion(ByVal AddresseServeur As String, ByVal numeroPort As Integer, ByVal user As String, ByVal password As String) As List(Of String)
            Dim liste As New List(Of String)
     
            Dim value As String = ""
            value = ConfigurationManager.AppSettings.Get("Authentification")
     
            Dim valeur() As String
            valeur = value.Split(";")
     
            AddresseServeur = valeur(0)
            AddresseServeur = AddresseServeur.Replace("Server=", "")
            liste.Add(AddresseServeur)
     
            Dim temporairePort As String = valeur(1)
            temporairePort = temporairePort.Replace("Port=", "")
            numeroPort = CType(temporairePort, Integer)
            liste.Add(numeroPort)
     
            user = valeur(2)
            user = user.Replace("User=", "")
            liste.Add(user)
     
            password = valeur(3)
            password = password.Replace("Password=", "")
            liste.Add(password)
     
            Return liste
     
        End Function
     
        Private Function SendConnect(ByVal InfoConnection As String) As Boolean
            Dim reponse As Boolean = True
     
            Try
                Dim message() As Byte
                message = Encoding.UTF8.GetBytes(InfoConnection)
     
                Dim Envoi As Integer = 0
                Envoi = MonSocketClient.Send(message)
     
            Catch ex As Exception
                reponse = False
     
            End Try
            Console.WriteLine("vjldfbvl")
            Return reponse
        End Function
     
        Private Sub ThreadLecture(ByVal adresse As String, ByVal port As String)
     
            Try
     
     
                Dim listener As TcpListener = New TcpListener(IPAddress.Parse(adresse), port)
                listener.Start()
     
                While True
                    Dim client As TcpClient = listener.AcceptTcpClient()
                    Dim ts As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf AcceptConnection)
                    Dim MonThread As Thread = New Thread(ts)
                    MonThread.Start()
     
                End While
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Sub
     
        Private Sub AcceptConnection(ByVal obj As Object)
            Try
                Dim utilisateur As New User
                Dim client As TcpClient = CType(obj, TcpClient)
                Dim stream As NetworkStream = client.GetStream
                Dim paquet As New Paquet
                paquet = paquet.Receive(stream)
                Dim ap As PaquetManager
                ap = CType(paquet, PaquetManager)
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Sub
    ServeurTcp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Dim port As Integer = 5100
        Dim auth As AuthManager
     
        Public Sub StartServeur()
     
            Dim listener As TcpListener = New TcpListener(IPAddress.Any, port)
            listener.Start()
     
            While True
                Dim client As TcpClient = listener.AcceptTcpClient()
                Dim ts As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf AcceptConnection)
                Dim MonThread As Thread = New Thread(ts)
                MonThread.Start()
     
            End While
     
        End Sub
     
        Private Function TraitementConnexion(ByVal SocketEnvoi As Socket) As User
            Dim utilisateur As New User
            Dim tabByte() As Byte
            Dim recu As Integer
            'Récupère le message
            recu = SocketEnvoi.Receive(tabByte)
            'Traduit en string
            Dim chaine As String = Encoding.UTF8.GetString(tabByte)
            chaine.Substring(0, recu)
            Dim tab() As String = chaine.Split(";")
            Dim user As String = tab(0)
            Dim password As String = tab(1)
            utilisateur = auth.Connect(user, password)
            Dim stream As NetworkStream
     
            Return utilisateur
        End Function
     
        Private Sub AcceptConnection(ByVal obj As Object)
            Try
                Dim utilisateur As New User
                Dim client As TcpClient = CType(obj, TcpClient)
                Dim stream As NetworkStream = client.GetStream
                Dim paquet As New Paquet
                paquet = paquet.Receive(stream)
     
                Dim chaine As String = paquet.ToString
                Console.WriteLine(chaine)
                Dim tab() As String = chaine.Split(";")
                Dim user As String = tab(0)
                Dim password As String = tab(1)
    'renvoi l'utilisateur avec ce login et password
                utilisateur = auth.Connect(user, password)
                Dim ap As PaquetManager = New PaquetManager(utilisateur)
                paquet.Send(ap, stream)
     
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
     
        End Sub
    Paquet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Public Enum TypePaquet
        Authentification
    End Enum
     
    <Serializable()> Public Class Paquet
     
        Private _type As TypePaquet
        Public Property TYPE() As TypePaquet
            Get
                Return _type
            End Get
            Set(ByVal value As TypePaquet)
                _type = value
            End Set
        End Property
     
        Public Sub Paquet(ByVal typePa As TypePaquet)
            _type = typePa
        End Sub
     
        Public Sub Send(ByVal paquet As Paquet, ByVal stream As Stream)
            Dim bf As New BinaryFormatter
            bf.Serialize(stream, paquet)
            stream.Flush()
        End Sub
     
        Public Function Receive(ByVal stream As NetworkStream) As Paquet
     
            Dim p As New Paquet
            p = Nothing
     
            Dim bf As New BinaryFormatter
            p = CType(bf.Deserialize(stream), Paquet)
     
            Return p
        End Function
    End Class
    PaquetManager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <Serializable()> Public Class PaquetManager
        Inherits Paquet
     
        Private _user As User
        Public Property USER() As User
            Get
                Return _user
            End Get
            Set(ByVal value As User)
                _user = value
            End Set
        End Property
     
        Public Sub New(ByVal us As User)
            _user = us
        End Sub
    End Class
    Voila voila mais mon code ne marche pas du tout et j'ai beau chercher et essayer des choses je n'y arrive pas . Pouvez vous m'aider a réussir cette fonctionnalité?

    PS: J'ai réussi a créer un chat pour m’entraîner qui fonctionne mais je pense que le problème est d'envoyer et recevoir des objets..

    Cordialement,
    Kévin

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si vous faites le programme des 2 côtés utilisez plutot wcf, c'est plus simple à coder (pas forcément plus simple à comprendre ^^)

    ca encapsule la connexion et ca expose des membres de classe
    en schématisant le fonctionnement ca donne sur le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function connect (login as string, password as string) as user
       ' le code
    end function
    il faut un classe user avec les 4 propriétés que vous voulez retourner
    vous codez la sub pour remplir une isntance de user que vous retournez

    et sur le client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim userinfo as user = moninstancewcf.connect(user, pass)
    ca appelle la fonction sur le serveur, et ca attend le retour de la fonction
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Bonjour,

    Tout d'abord je te remercie pour ta réponse. Ensuite je ne connais pas du tout wcf ...
    En réalité, je vais lancer ceci sur deux applications différente une serveur et un client. le serveur a des méthodes que je lui ai implémenter l'une d'elle est de lire un fichier xml nommé user.xml. De ce fait , une fonction connect renvoie le user depuis son login et mdp. Ensuite, le serveur doit envoyé ce user au client.

    Donc est-ce que ta solution est toujours valide ? Si oui peut tu m'expliquer le fonctionnement ?

    Cordialement,
    Kévin

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    wcf permet de faire des webservices, ca encapsule les transmissions réseaux
    on peut faire du client serveur comme tu le souhaites avec

    sur l'appli serveur tu fais un new du service wcf
    sur l'appli client tu fais un new du client wcf
    ca utilise du socket tcp/ip mais c'est déjà précodé

    et après si tu relis mon exemple ca simplifie le traitement
    car quand le user exécute instancewcf.connect, le code n'est pas exécuté dans l'application client, mais par le serveur dans la fonction connect que lui seule a, il peut alors lire dans le fichier et faire un return de ce qu'il faut
    le return fait la retour repart en tcp/ip vers le client

    après il y a des tutos qui expliquent le fonctionnement et le paramétrage de wcf
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci encore pour ta réponse.
    Je vais lire des tutoriel sur ce service car je t'avoue je n'ai pas tout compris ^^.

    Cordialement,
    Kévin

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    ReBonjour,

    J'ai discuter avec mon maitre de stage . Il souhaite que j'utilise : .NET Remoting.
    Donc pouvez vous me dire si j'ai bien compris :
    - Le client envoie le mot de passe et le login au serveur
    - Le serveur lui recois ce que le client lui demande
    - Il appele la fonction connect pour recuperer l'user
    - Il le "compresse" en Byte() et l'envoie au client
    -Client réceptionne et le "décompresse"

    Le seul soucis c'est que je ne sais pas comment "compresser un objet" pour qu'il puisse passer en TCP.

    Avez vous une explication, un conseil.. ?

    Cordialement,
    Kévin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PTI BTS : client Serveur socket et compagnie
    Par Nicow57 dans le forum VB.NET
    Réponses: 0
    Dernier message: 24/04/2009, 13h28
  2. Client/Serveur Socket, envoyer un message précis
    Par Chyokyka dans le forum Débuter
    Réponses: 4
    Dernier message: 24/03/2009, 17h59
  3. Application client/serveur sockets
    Par loreleï85 dans le forum Réseau
    Réponses: 4
    Dernier message: 05/01/2007, 12h44
  4. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo