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();
       }