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

Windows Forms Discussion :

Socket Pour Reception de données !


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut Socket Pour Reception de données !
    Bonsoir tout le monde, je debute en VB.net, je suis sur le point de créer une application qui lis un fichier texte, le crypte l'envoyer sur le réseau, une deuxieme machine dont on a préciser l'adresse ip sur la premiere recevra le texte crypté et le decryptera.
    C'est bon pour tout ce qui concerne le cryptage -> decryptage, l'envoi de données aussi, le seul souci c la reception, j'arrive pas a recevoir les donnée que j'envoie sur le réseaux, là le code de mon expediteur :

    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
     
    Dim IP As String
    Dim _socket As New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
    Private Sub Envoi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
     
            Try
     
                'envoi
                IP = TextBox1.Text
                _socket.Connect(IP, 502)
                Dim donnees As String = TextBox2.Text
                Dim buffer1 As Byte() = System.Text.Encoding.UTF8.GetBytes(donnees)
                _socket.Send(buffer1, 0, buffer1.Length, Net.Sockets.SocketFlags.None)
     
                _socket.Shutdown(Net.Sockets.SocketShutdown.Send)
            Catch ex As Exception
                MsgBox(ex.Message.ToString)
            End Try
        End Sub
    ça fait trois jours que j'essaye de trouver une solution pour la bonne réception des données mais sans resultats, donc ma deuxieme machine dois :
    - Recevoir les donnée, j'ai vu que c avec un 'Listen' ou 'Receive' qu'on peut le faire,
    - stocker les donnée dans un buffer, sachant que ce qu'on va recevoir c un texte dont on connait pas la taille.
    - Transformer le contenu du buffer en string affin de l'afficher dans un TextBox

    J'espere que vous avez une idée sur ce que je peux faire pr résoudre ce probleme.

    Merci. Bonne soirée.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par autregalaxie Voir le message
    - Recevoir les donnée, j'ai vu que c avec un 'Listen' ou 'Receive' qu'on peut le faire,
    Pas "ou" mais "et"
    1. mets ta socket en écoute avec Listen
    2. attends une connexion avec Accept
    3. appelle Receive sur la socket renvoyée par Accept
    Citation Envoyé par autregalaxie Voir le message
    - stocker les donnée dans un buffer, sachant que ce qu'on va recevoir c un texte dont on connait pas la taille.
    Il faut faire une boucle avec un buffer de taille fixe, tant qu'il y a des données disponibles
    Citation Envoyé par autregalaxie Voir le message
    - Transformer le contenu du buffer en string affin de l'afficher dans un TextBox
    C'est le contraire de ce que tu as fait pour l'envoi avec l'Encoding, il faut utiliser GetString au lieu de GetBytes

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Merci pour votre réponse, Enfet j'avais ecris ce bout de code, mais ça n'avait rien donné, pour l'algo je sais bien comment ça fonctionne, j'avais deja programmer des clients serveur en Java, c plutot avec le code VB.net que je gallere, donc si vous pouvez me preciser ce que je dois metre comme code.

    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
    Private Sub ActiveServeur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
          Try
               Dim s As New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
                Dim ipAdressServer As Net.IPAddress = Net.IPAddress.Parse(Net.Dns.GetHostAddresses(Net.Dns.GetHostName())(0).ToString)
                s.Bind(New Net.IPEndPoint(ipAdressServer, 502))
               s.Listen(1)
                Dim s2 As Net.Sockets.Socket = s.Accept()
     
                Dim ret As Integer
                Dim rbuf(s.Available) As Byte
                Dim chaine As New System.Text.StringBuilder
     
     
                ret = s2.Receive(rbuf, 0, s.Available, Net.Sockets.SocketFlags.None)
                msgbox(ret)
                chaine.Append(System.Text.Encoding.UTF8.GetString(rbuf, 0, ret))
     
                MsgBox(System.Text.Encoding.UTF8.GetString(rbuf, 0, ret))
     
     
     
            Catch ex As Exception
                MsgBox(ex.Message)
     
            End Try
        End Sub

    Je vous remercie.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    avec ta technique, tu ne télécharges que les données qui sont disponibles au moment où tu commences la réception (s.Available) : or, à moins que ta connexion ait une vitesse infinie, le transfert n'est pas instantané... le serveur a peut-être encore des données à envoyer, qui ne sont pas encore disponibles. Donc il faut boucler et continuer à appeler Receive jusqu'à ce que tu aies reçu toutes les données. Il n'y a rien au niveau des sockets pour indiquer que toutes les données ont été transmises : c'est à ton programme de gérer ça. Il y a différentes méthodes possibles, notamment :
    - transmettre au début la taille des données à transférer : par exemple, les 4 premiers octets reçus peuvent représenter la taille T du transfert ; quand tu as reçu T octets, tu peux sortir de la boucle
    - définir une valeur d'octet (ou une suite d'octets) qui indique la fin du message : quand tu reçois cette valeur, tu arrêtes de recevoir

Discussions similaires

  1. probleme(détaillé au max) de reception de données Socket
    Par Hellgast dans le forum C++Builder
    Réponses: 0
    Dernier message: 08/11/2009, 13h37
  2. Réponses: 3
    Dernier message: 27/10/2008, 22h31
  3. sockets probleme pour transmissions de donnée
    Par sebatlante dans le forum Réseau
    Réponses: 11
    Dernier message: 23/08/2007, 12h02
  4. [socket] reception de données de taille incunnue
    Par julienboys85 dans le forum Développement
    Réponses: 5
    Dernier message: 13/10/2006, 15h43
  5. [socket] reception des données.
    Par flocks dans le forum Réseau
    Réponses: 3
    Dernier message: 23/04/2006, 15h47

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