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 :

Fichier Corrompu avec TCP Client


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Fichier Corrompu avec TCP Client
    Bonjour j'ai crée 2 fonctions d'envoie de fichier à travers un reseau. J'envoie des paquets d'octet. Mon fichier d'envoie, et mon fichier reçu, ont bien la même taille. Mais le fichier que je reçois est corrompu à l'ouverture, je n'arrive pas à trouver le problème...Si qqun peut m'aider.

    J'utilise une itération pour envoyer et recevoir...

    Fonction envoie :

    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
            private bool sendBloc(int blocNumber, string filePath) {
     
                    FileStream fs = new FileStream(filePath, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    fs.Position = blocNumber * 1024000;
                    byte[] buffer = new byte[settings.PacketSize];
                    byte[] byteToSend = br.ReadBytes(1024000);
                    Console.WriteLine(byteToSend.Length);
                    fs.Close();
     
                    TcpClient tcpC = new TcpClient(settings.DestinationAdress, settings.Port);
                    NetworkStream net = tcpC.GetStream();
                    net.Write(byteToSend, 0, byteToSend.Length);
                    net.Flush();
                    net.Close();
                    tcpC.Close();
                    return true;
                }

    Fonction de reception :

    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
    private void receiveBloc(int blocNumber, string directoryToSave, int size) {
     
                   Console.WriteLine("Attente du paquet");
                   tcpL.Start();
                   TcpClient tcpC2 = tcpL.AcceptTcpClient();
                   Console.WriteLine("Reception du paquet");
                   byte[] bytes = new byte[1024000];
                   NetworkStream network = tcpC2.GetStream();
                   FileStream fs = new FileStream("C:\\temp\\filetoreceive" + "\\guide" + ".mp3", FileMode.Create);
                   BinaryReader br = new BinaryReader(network);
                   BinaryWriter bw = new BinaryWriter(fs);
                   int nByteRead = 0;
                   fs.Position = blocNumber * 1024000;
     
                   while ((nByteRead = network.Read(bytes, 0, 1024000)) > 0) {
                        bw.Write(bytes, 0, nByteRead);
                    }
                   network.Flush();
                   network.Close();
                   fs.Flush();
                   fs.Close();
                   br.Close();
                   bw.Close();
                   tcpC2.Close();
           }

  2. #2
    Membre régulier Avatar de deejay2221
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2006
    Messages : 98
    Points : 78
    Points
    78
    Par défaut
    Bonjours.

    J'ai eu le même problème que toi il y a quelque semaines. Le problème est qu'à chaque paquet que tu reçois, tu va réécrire à la position 0 de ton vecteur de byte au lieu de continuer à la position où tu était rendu.

    Pour ton programme, essaye plutot ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int offset = 0;
    while ((nByteRead = network.Read(bytes, 0, 1024000)) > 0) {
        bw.Write(bytes, offset, nByteRead);
        offset += nByteRead;
    }
    Voilà

  3. #3
    Invité
    Invité(e)
    Par défaut
    salut, merci de ta réponse, mais en faite c'est pas car je positionne mon vecteur grace à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fs.Position = blocNumber * 1024000;
    J'initialise blocNumber à 0, puis je l'incrémente pour me déplacer sur stream.

    Je te remercie quand même d'avoir chercher

    Le problème venait qu'a chaques itérations, je demandais de créer un fichier :

    Il fallait bien sur mettre :


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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/04/2010, 21h41
  2. Probleme avec un Client Serveur de fichier
    Par kertimanoff dans le forum Général Java
    Réponses: 11
    Dernier message: 10/12/2009, 16h45
  3. [Zip] Création d'un fichier zip avec zip.lib.php corrompue
    Par fdthierry dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 02/06/2008, 14h01
  4. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  5. [TCP] Client/Serveur avec les composants Indy
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/02/2007, 12h47

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