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 47 48 49 50 51
   | static private void HandleClientComm(object client)
        {
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream networkStream = tcpClient.GetStream();
            Server.WriteLine("Réception des données ...");
 
            byte[] data = new byte[1024];
 
            int bytesRecus = networkStream.Read(data, 0, 4);
            int taille = BitConverter.ToInt32(data, 0);
 
            RecreateFile(tcpClient, networkStream, data, taille);
 
            networkStream.Close();
            Server.WriteLine("Fermeture du flux de données.");
 
            tcpClient.Close();
            Server.WriteLine("Client déconnecté.");
        }
 
        static private void RecreateFile(TcpClient tcpClient, NetworkStream networkStream, byte[] data, int taille)
        {
            FileStream fileStream = new FileStream(taille + ".txt", FileMode.Create); // ici le taille + ".txt" est simplement utile pour que le nom du fichier soit unique et qu'il n'écrase pas le précédent.
 
            int nbPaquets = taille / 1024 + 1;
            int taillePaquet = 0;
 
            int count = 0, total = 0;
            for(int i=0;i<nbPaquets;i++)
            {
                if (i == (nbPaquets - 1))
                    taillePaquet = taille % 1024;
                else
                    taillePaquet = 1024;
 
                count = networkStream.Read(data, 0, taillePaquet);
                fileStream.Write(data, 0, count);
                total += count;
 
                Server.WriteLine(total + " bytes reçu ... (" + count + " bytes)");
            }
 
            fileStream.Close();
 
            int bytesRecus = networkStream.Read(data, 0, 4);
            if (bytesRecus != 0)
            {
                taille = BitConverter.ToInt32(data, 0);
                RecreateFile(tcpClient, networkStream, data, taille);
            }
        } | 
Partager