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); }
/// <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); }
/// <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); }
/////////////////////////////////////////////////////////////////////////////////////////////// /// <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(); }
/////////////////////////////////////////////////////////////////////////////////////////////// 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); } }
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); }
/// <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); }
private static bool isParentDirectory(string repertoireDeBase, string sPath) { if (repertoireDeBase.Equals(sPath)) { // Les deux repertoires sont identiques return(true); } try { // Repertoire au dessus? String parent = Directory.GetParent(sPath).FullName; if (parent.Length > 0) { return(isParentDirectory(repertoireDeBase, parent)); } } catch (Exception) { } Mainform.WriteErrorToConsole("ERREUR: utilisation d'un chemin qui n'est pas sous le répertoire racine: " + sPath); return(false); }
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); }