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 :

Envoi de fichiers TcpListener/Client


Sujet :

Windows Forms

  1. #1
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut Envoi de fichiers TcpListener/Client
    Bonjour tout le monde,

    c'est mon 1er message sur le forum et j'espère être au bon endroit !

    Je développe une petite application qui consiste à envoyer des fichiers depuis le client et les recevoir du coté serveur, mais je me retrouve avec un problème, les fichiers se transmettent et se créent mais restent vides, j'ai pensé alors que le problème pouvait venir de mon code, le voici :

    Envoi :

    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
     
     
    Private Shared Sub SendFile()
            Using tcpClient As New TcpClient("127.0.0.1", 80)
                Using networkStream As NetworkStream = tcpClient.GetStream()
     
                    Dim dataToSend As Byte() = File.ReadAllBytes("D:\1.PNG")
     
                    networkStream.Write(dataToSend, 0, dataToSend.Length)
     
                    networkStream.Flush()
     
                End Using
     
            End Using
     
        End Sub
    Réception :

    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
     
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim thread As New Thread(AddressOf Listen)
            thread.Start()
     
            Console.WriteLine("Listening...")
            Console.ReadLine()
     
        End Sub
     
        Private Shared Sub Listen()
            Dim localAddress As IPAddress = IPAddress.Any
            Dim port As Integer = 80
            Dim tcpListener As New TcpListener(localAddress, port)
            tcpListener.Start()
     
            Using tcpClient As TcpClient = tcpListener.AcceptTcpClient()
                Using networkStream As NetworkStream = tcpClient.GetStream()
                    Using stream As Stream = New FileStream("D:\la copie.png", FileMode.Create, FileAccess.ReadWrite)
                        ' Buffer for reading data
                        Dim bytes As [Byte]() = New [Byte](1023) {}
     
                        Dim length As Integer
     
                        While networkStream.Read(bytes, 0, bytes.Length)
                            stream.Write(bytes, 0, length)
                        End While
                    End Using
                End Using
            End Using
            tcpListener.[Stop]()
     
        End Sub
    Merci de bien vouloir m'aider et à bientôt !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En effet il y a un petit problème dans ta fameuse "zone rouge" et je suis étonné que le compilateur ne t'ait pas mis un warning (ou alors il y en a bien eu un mais tu n'y as pas pris garde) : ta variable "length" n'est jamais affectée et du coup vaudra toujours 0... Et par conséquent il ne risque pas d'écrire grand chose en effet!

    Il te manque juste de stocker dans ta variable "length" le résultat de "networkStream.Read(bytes, 0, bytes.Length)" qui est censé être un entier...

  3. #3
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    Salut Ph_Gr,

    d'abord merci pour ta réponse rapide, j'ai essayé de faire ce que tu m'avais demandé mais je rencontre le même problème 0 Ko, j'espère ne pas me tromper mais voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     While length = networkStream.Read(bytes, 0, bytes.Length)
                            stream.Write(bytes, 0, length)
                        End While

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guatto Voir le message
    Salut Ph_Gr,

    d'abord merci pour ta réponse rapide, j'ai essayé de faire ce que tu m'avais demandé mais je rencontre le même problème 0 Ko, j'espère ne pas me tromper mais voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     While length = networkStream.Read(bytes, 0, bytes.Length)
                            stream.Write(bytes, 0, length)
                        End While
    Attention : en VB.NET quand tu fais ce code, tu n'affectes toujours pas la variable length, tu testes juste si la valeur de length est égale à "networkStream.Read(bytes, 0, bytes.Length)", ce qui effectivement ne va rien changer!

    Si tu étais en C# tu aurais pu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     while  ((length = networkStream.Read(bytes, 0, bytes.Length))>0)
    {
       stream.Write(bytes, 0, length)
    }
    En VB.NET ça devrait donner quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     Dim length = networkStream.Read(bytes, 0, bytes.Length)
     
     While length>0
        stream.Write(bytes, 0, length)
        length = networkStream.Read(bytes, 0, bytes.Length)
     End While

  5. #5
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    Merci beaucoup Ph_Gr , ça fonctionne avec perfection !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/04/2012, 10h54
  2. Réponses: 1
    Dernier message: 22/08/2007, 09h38
  3. Pb envoi de fichier vers client via "ServletOutputStream"
    Par fredos70 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/11/2006, 14h47
  4. Envoi de fichier au client depuis une servlet
    Par vedrfolnir dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 04/07/2006, 14h57
  5. [vba] Envoi de fichier ascii client Windows => server Lin
    Par kremvax dans le forum Général VBA
    Réponses: 3
    Dernier message: 28/11/2005, 12h00

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