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

C# Discussion :

problème de ré assemblage de fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut problème de ré assemblage de fichier
    Bonjour,

    Je suis actuellement étudiant en IUT et j'ai un projet de logiciel réseau en c# à faire. J'ai fait un logiciel de transfert de fichier type peer-to-peer cependant j'ai des problèmes pour la reconstruction du fichier lors de l'envoie.
    En effet une fois le fichier télécharger sur un autre ordinateur le fichier que je reçois ne fait pas la même taille et l'image n'est pas correct (décalage ou couleur bizarre) . J'ai deux fonctions, une pour le téléchargement et une lors de la demande d'envoie de fichier. Voici ces fonctions :

    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
    private void telechargement()
            {
                int NbByte = 1440;
                byte[] b = new byte[NbByte];
                int NbByteLus;
                FileStream fs = File.OpenWrite("downloads\\" + nomfichier); //création du fichier dans le dossier downloads
                NbByteLus = client.Client.Receive(b);
                while (NbByteLus > 0) //tant qu'il reste des bits du fichier
                {
                    fs.Write(b, 0, b.Length); //remplissage du fichier avec les bits reçus
                    b = null;
                    b = new byte[NbByte]; 
                    NbByteLus = client.Client.Receive(b);
                    Thread.Sleep(20);
                    
                }
                fs.Close();
                EVTFinTelechargement(nomfichier); //Evènement de fin de téléchargement
                MessageBox.Show("Le fichier " + nomfichier + " a été téléchargé !");
                download = null;
            }
    
    
    
    //lors de l'attente d'une demande d'un fichier par un autre utilisateur
            public void AttenteDemandeFichier()
            {
                TcpClient clientDemandeur;
                StreamReader fluxin;
                ecoute = new TcpListener(5002); //attente d'un utilisateur
                ecoute.Start();
                try
                {
                    while (true)
                    {
                        clientDemandeur = ecoute.AcceptTcpClient();
                        fluxin = new StreamReader(clientDemandeur.GetStream());
                        string nf = fluxin.ReadLine(); //on récupère le nom du fichier que l'utilisateur demande
                        clientDemandeur.Client.SendFile("partagés\\" + nf); //envoie du fichier
                        clientDemandeur.Close();
                        fluxin.Close();
                        clientDemandeur = null;
                    }
                }
                catch {}
            }
    Si vous auriez des idées je vous remercie.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    BUG
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (NbByteLus > 0) //tant qu'il reste des bits du fichier
    {
    fs.Write(b, 0, b.Length);
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (NbByteLus > 0) //tant qu'il reste des bits du fichier
    {
    fs.Write(b, 0, NbByteLus);
    Edit :
    + la realloc du buffer ne sert à rien
    + préfére using à close()
    + le buffer est trop petit
    + sleep(20) c'est énorme

    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
     
    using (FileStream fs = File.OpenWrite("downloads\\" + nomfichier))
    {
         Byte[] b = new byte[1440];
     
         while (true)
         {
              int NbByteLus = client.Client.Receive(b);
              if (NbByteLus == 0)
                   break;
     
              fs.Write(b, 0, NbByteLus); //remplissage du fichier avec les bits reçus
              Thread.Sleep(20);
         }
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    J'ai effectué les modifications sur le programme, en effet cela marche parfaitement.

    Je te remercie beaucoup

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

Discussions similaires

  1. Problème d'extraction d'un fichier zip
    Par njely dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2005, 22h36
  2. Réponses: 2
    Dernier message: 01/06/2004, 12h47
  3. Réponses: 2
    Dernier message: 28/04/2004, 11h25
  4. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49
  5. Problème d'E.S. sur fichier avec open
    Par Bubonik software dans le forum C
    Réponses: 6
    Dernier message: 04/02/2004, 19h42

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