PythonGreg
Messages postés68Date d'inscriptionjeudi 3 novembre 2011StatutMembreDernière intervention 6 février 2015
-
14 sept. 2012 à 07:20
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
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.
A voir également:
Piloter un serveur à distance probléme de commande
PythonGreg
Messages postés68Date d'inscriptionjeudi 3 novembre 2011StatutMembreDernière intervention 6 février 2015 14 sept. 2012 à 18:57
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);
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
PythonGreg
Messages postés68Date d'inscriptionjeudi 3 novembre 2011StatutMembreDernière intervention 6 février 2015 14 sept. 2012 à 16:24
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;