示例#1
0
        private static void transferFichier(SocketUtils clientStream)
        {
            string result = REPONSE_NON;

            try
            {
                // Nom du fichier a recevoir
                string nom     = clientStream.LireChemin();
                string sTaille = clientStream.LireLigne();
                Mainform.WriteMessageToConsole($"Chemin du fichier: {nom}, taille {sTaille}");

                // Taille du fichier a recevoir
                long taille = long.Parse(sTaille);

                string path = Path.Combine(Settings.Default.RepertoireDeBase, nom);
                if (checkPath(ref path))
                {
                    FileStream f     = File.Create(path);
                    long       nbLus = clientStream.LitFichier(taille, f);
                    f.Close();
                    result = REPONSE_OUI;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans transfertfichier");
                Mainform.WriteExceptionToConsole(e);
            }

            Mainform.WriteMessageToConsole($"Réponse: {result}");
            clientStream.EcritLigne(result);
        }
示例#2
0
        /// <summary>
        /// Verifie l'existence d'un fichier
        /// Reponse: REPONSE_OUI ou REPONSE_NON
        /// </summary>
        /// <param name="clientStream"></param>
        private static void fichierExiste(SocketUtils clientStream)
        {
            string result = REPONSE_NON;

            try
            {
                string fichier = clientStream.LireChemin();
                Mainform.WriteMessageToConsole($"Test du fichier: {fichier}");

                string path = Path.Combine(Settings.Default.RepertoireDeBase, fichier);
                if (checkPath(ref path))
                {
                    bool existe = File.Exists(path);
                    result = existe ? REPONSE_OUI : REPONSE_NON;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans lireLigne");
                Mainform.WriteExceptionToConsole(e);
            }

            Mainform.WriteMessageToConsole($"Réponse: {result}");
            clientStream.EcritLigne(result);
        }
示例#3
0
        /// <summary>
        /// Lit une ligne (terminee par \0 dans le stream d'entree
        /// </summary>
        /// <param name="clientStream"></param>
        /// <returns></returns>
        public string LireLigne()
        {
            while (!_clientStream.DataAvailable)
            {
                ;
            }
            byte[] b = new byte[4096];
            try
            {
                byte[] charCur = new byte[1];
                _clientStream.Read(charCur, 0, charCur.Length);
                int bytesRead = 0;
                while (charCur[0] != TERMINAL)
                {
                    b[bytesRead] = charCur[0];
                    _clientStream.Read(charCur, 0, charCur.Length);
                    bytesRead++;
                }

                return(_encoder.GetString(b, 0, bytesRead));
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans lireLigne");
                Mainform.WriteExceptionToConsole(e);
            }

            return(null);
        }
示例#4
0
        ///////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Traite une requete
        /// </summary>
        /// <param name="client"></param>
        ///////////////////////////////////////////////////////////////////////////////////////////////
        public static void traiteRequete(object client)
        {
            nbRequetes++;
            Mainform.UpdateNbRequetes();
            try
            {
                bool          continuer    = true;
                TcpClient     tcpClient    = client as TcpClient;
                NetworkStream clntStream   = tcpClient.GetStream();
                SocketUtils   clientStream = new SocketUtils(clntStream);
                //do
                //{
                string commande = clientStream.LireLigne();
                if (commande?.Length > 0)
                {
                    Mainform.WriteMessageToConsole($"Requête: {commande}");

                    switch (commande)
                    {
                    case TEST_ADRESSE: testAdresse(clientStream); break;

                    case CREER_REPERTOIRE: creerRepertoire(clientStream); break;

                    case FICHIER_EXISTE: fichierExiste(clientStream); break;

                    case UPLOAD_FICHIER: transferFichier(clientStream); break;

                    case TRANSFERT_FICHIER_DATE: transferFichierDate(clientStream); break;

                    case CHANGE_DATE: setDate(clientStream); break;

                    case INVALIDES_CHEMIN: caracteresInvalidesChemin(clientStream); break;

                    case FERMER: continuer = false; break;

                    case LISTE_FICHIERS: listeFichiers(clientStream); break;

                    case LISTE_REPERTOIRES: listeRepertoires(clientStream); break;

                    case DOWNLOAD_FICHIER: downloadFichier(clientStream); break;

                    default:
                        Mainform.WriteErrorToConsole($"Commande inconnue: '{commande}'"); break;
                    }
                }
                //}
                //while (continuer);
                Mainform.WriteMessageToConsole("Socket closed");
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans le traitement de la requête");
                Mainform.WriteExceptionToConsole(e);
            }

            nbRequetes--;
            Mainform.UpdateNbRequetes();
        }
示例#5
0
 ///////////////////////////////////////////////////////////////////////////////////////////////
 private static void setDate(string path, DateTime date)
 {
     try
     {
         if (date.Ticks != 0)
         {
             File.SetCreationTime(path, date);
         }
     }
     catch (Exception e)
     {
         Mainform.WriteErrorToConsole("Erreur dans transfertfichierdate");
         Mainform.WriteExceptionToConsole(e);
     }
 }
示例#6
0
 internal async Task <bool> arrete()
 {
     try
     {
         _enroute = false;
         _tcpListener?.Stop();
         _serveurThread?.Abort();
         _tcpListener = null;
         Mainform.WriteMessageToConsole("Serveur arrêté");
     }
     catch (Exception e)
     {
         Mainform.WriteErrorToConsole("Erreur dans serveurThread");
         Mainform.WriteExceptionToConsole(e);
     }
     return(true);
 }
示例#7
0
        /// <summary>
        /// Lit un nombre donne d'octets dans la socket et les ecrit dans un fichier
        /// </summary>
        /// <param name="taille"></param>
        /// <param name="clientStream"></param>
        /// <param name="sOutput"></param>
        /// <returns></returns>
        public long LitFichier(long taille, FileStream sOutput)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();

            // Lecture des octets
            byte[] buffer = new byte[1024 * 32];
            long   nbLus  = 0;

            try
            {
                while (nbLus < taille)
                {
                    int nbAlire = (int)Math.Min(buffer.Length, taille - nbLus);
                    int nb      = _clientStream.Read(buffer, 0, nbAlire);
                    sOutput.Write(buffer, 0, nb);
                    nbLus += nb;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans transfertfichier");
                Mainform.WriteExceptionToConsole(e);
            }

            stopWatch.Stop();
            TimeSpan ts      = stopWatch.Elapsed;
            double   vitesse = nbLus / ts.TotalSeconds;
            String   vit;

            if (vitesse > 1000)
            {
                vit = (vitesse / 1000.0).ToString("F2") + " ko/s";
            }
            else
            {
                vit = vitesse.ToString("F2") + " o/s";
            }
            Mainform.WriteMessageToConsole($"{nbLus} octets lus en {ts.TotalSeconds.ToString("F3")} sec soit {vit}");
            return(nbLus);
        }
示例#8
0
        private static void creerRepertoire(SocketUtils clientStream)
        {
            string result = REPONSE_NON;

            try
            {
                string repertoire = clientStream.LireChemin();
                Mainform.WriteMessageToConsole($"Répertoire à créer: {repertoire}");
                string path = Path.Combine(Settings.Default.RepertoireDeBase, repertoire);
                if (checkPath(ref path))
                {
                    Directory.CreateDirectory(path);
                    result = REPONSE_OUI;
                }
            }
            catch (Exception e)
            {
                Mainform.WriteErrorToConsole("Erreur dans creerRepertoire");
                Mainform.WriteExceptionToConsole(e);
            }

            Mainform.WriteMessageToConsole($"Réponse: {result}");
            clientStream.EcritLigne(result);
        }