Piloter un serveur à distance probléme de commande [Résolu]

Messages postés
70
Date d'inscription
jeudi 3 novembre 2011
Statut
Membre
Dernière intervention
6 février 2015
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
- 15 sept. 2012 à 23:26
Bonjour à tous ;
Suite à un écran d'un mini PC portable casse j'ai eu l'idée de monté un petit Serveur qui me servira juste pour stoker des fichiers ou autre donc j'ai récupéré toute la carte mère , Disque dur ? du PC portable tout fonctionne correctement .

Pour métré en service se système j'ai donc réalisé un programme Serveur Client avec les composants TServerSocket, TClientSocket afin de pouvoir communiquer avec mon Serveur est lui données des ordres comme( Télécharger un fichier puis le renvoie au client , Supprimer , Renommé ? ) tout a partir du client.

Donc pour la partir connexion du Serveur , Client tout fonctionne correctement j'ai mis en place un traitement des erreurs Socket afin de déterminer le type d'erreur.

Pour la partir communication du Client au serveur pas de problème.

Mais voilà mon gros problème.
l'Application Serveur doit être piloté par le Client tout simplement en lui envoient une ligne de commande qui appellera une fonction ou procédure ou autre exemple : $/Scann /[C:/Mon Dossier]

Voici une procédure qui sera dans la partir Serveur :
procedure Scan( Chemin : string );
var
  FichierFound  : Integer;
        Fichier : TSearchRec;

begin   { Insert barre oblique a la fin du chemin si elle existe pas }
        Chemin := IncludeTrailingPathDelimiter( Chemin );
  { On recherche dans : faAnyFile : Tout dossier + Tout fichier : *.* }
  FichierFound := FindFirst( Chemin + '*.*' , faAnyFile , Fichier);
  if ( FichierFound = 0 ) then
  begin
    repeat
      { On élimine les dossiers qui son = a "." et ".." }
      if ( ( Fichier.Name <> '.' )  and ( Fichier.Name <> '..' ) ) then
      begin
        if ( ( Fichier.Attr and faDirectory ) <> faDirectory ) then
          { Insert le chemin est le nom du fichier }
          begin
          frMain.ListBox1.Items.Add (Chemin + Fichier.Name) ;
          end
        else { Chercher dans le sous-dossier }
          Scan( Chemin +  Fichier.Name );
      end;
    { On passe au suivant si <> 0 }
    until ( FindNext( Fichier ) <> 0 );
  end;
  { On ferme la recherche }
  SysUtils.FindClose( Fichier );
  Application.ProcessMessages;
end;


Pour que cette procédure soit exécuté par la partir du serveur j'envoie une ligne de commande du client $/Scann /[C:/Mon Dossier] vers le serveur qui lui appel la procédure Scan est exécutera le scan
Qui après sera renvoie au client pour le Résultat du Scan

Voilà ma question comment est-il possible d'extrait dans la ligne de commande C:/Mon Dossier afin de mettre cette chaine de caractères dans une Variable qui aura pour but de donner le chemin de départ du Scan.

Je vous dis un grand merci pour votre réponse est votre attention.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
70
Date d'inscription
jeudi 3 novembre 2011
Statut
Membre
Dernière intervention
6 février 2015
3
Merci
J'ai trouvé une reponse a mon probléme

var I : Integer;
Extra : String;
begin
Memo.clear;
 for I := 0 to Memo.Lines.Count -1 do
   if pos('$/scan/->',Memo.Lines.Strings[I]) <> 0 then
     Extra := Copy(Memo.Lines.Strings[I],10,Length(Memo.Lines.Text));
    // Appel la procedure Scan 
       Memo.lines.add(Scan(Extra)); // Chemin de départ du Scan.
    // Je renvoie le resultat du scan au client
    ServerSecket.Socket.Connections[0].SendText(Memo.Text); 


http://programmationdelphi.info/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PythonGreg
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
15
3
Merci
si tu souhaites tout faire toi-même tu aurais intérêt
à créer une fonction générale paramètrée renvoyant la chaine recherchée dans le mémo.

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
0
Merci
Salut,

Rien compris à ta question : tu veux extraire quoi à partir de quoi ? .

Deux remarques :

1)Via un socket on peut envoyer autre chose que des strings par exemple un record

type
  TCommand = Record
    Action    : string[25];
    Param1    : string[20];
    Param2    : string[20];
    Datas     : TObject;
  end;


2)L'utilisation d'une listbox coté serveur est à proscrire car n'a aucune intérêt : un TStringList par contre .

Ps : Ce que tu cherches à faire est un système serveur FTP/client FTP. Il existe des outils tout fait et gratuits sur la toile. Ceci dit si tu veux t'enquiquiner pour rien, autant faire les choses dans les règles de l'art et utiliser le protocole FTP qui est fait justement pour ce que tu cherches à faire
Commenter la réponse de Utilisateur anonyme
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
15
0
Merci
Bonjour,

FileZilla Client


cantador
Commenter la réponse de cs_cantador
Messages postés
70
Date d'inscription
jeudi 3 novembre 2011
Statut
Membre
Dernière intervention
6 février 2015
0
Merci
Tout abord je vous remercie pour votre attention

Voilà la ligne de commande exemple : $/scan/[c:/Mon Dossier] sera réceptionnée dans un Memo coté Serveur.

Mon problème et qu? il faut que je recherche dans le Mémo le début de cette ligne $/scan/ puis extraire ce qui est derrière [c:/Mon Dossier] puis métré cette chaine de caractère dans une variable afin de donner le chemin de départ du Scan.

Tmemo OnChange
var 
 RechCom : Integer;
 Extra : String;
 begin
   for RechCom := 0 to Memo.lines.count -1 do
   // Si la line du mémo = $/scan/... alor on extrait ce qui est derrière [c:/Mon Dossier] 
   // On le mais dans la variable (Extra);
   // Si la line du mémo = $/scan/ alor 
   // Appel la procedure Scan 
   Memo.lines.add(Scan(Extra)); // qui et le chemin de départ du Scan.
   // Pour le reste une fois que le scan sera fini
   // Je renvoie le resultat du scan au client
    ServerSecket.Socket.Connections[0].SendText(Memo);
end;


Merci pour votre réponse est votre attention.



http://programmationdelphi.info/
Commenter la réponse de PythonGreg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.