AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Client soll Befehl von Server ausführen!!!
Thema durchsuchen
Ansicht
Themen-Optionen

Client soll Befehl von Server ausführen!!!

Ein Thema von Trouble_Maker · begonnen am 2. Jul 2003 · letzter Beitrag vom 3. Jul 2003
Antwort Antwort
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#1

Client soll Befehl von Server ausführen!!!

  Alt 2. Jul 2003, 20:58
Hiho

habe das Tutorial von "http://www.tutorials.delphi-source.de/indy/file002.shtml" durchgearbeitet und es funktioniert einwandfrei !!!

Jetzt möchte ich aber, dass der Client einen "ganz normalen" Befehl ausführen soll, der aber von dem Server kommt. Also als ob, diese Procedur z.B. direkt in diesem Code drinstehen würde!

Wie bekomme ich das zum laufen ?


cu Trouble_Maker


PS: Hier im Forum habe ich nichts passendes gefunden!
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#2
  Alt 2. Jul 2003, 21:44
Hi,

weiß nicht ob ich das richtig verstanden habe, deshalb frage ich mal:
Meinst du jetzt, dass du dir quasi ganz normal mit Delphi ne Prozedur schreibst, die in ne Textdatei speicherst, sie an den Client schickst sodass er die dann ganz normal ausführen kann?
Kann mir nicht vorstellen dass das geht, weil der Client deine Prozedur ja nicht als solche erkennen kann, sondern halt nur als Textfile.
Du kannst ja auch nicht einfach Windows sagen, dass es den Quelltext deines Programms ausführen soll. Dein Programm musst du ja bevor du es benutzen kannst compilieren.
So wirds bei ner Prozedur auch sein, nur dass du ne einzelne Prozedur nicht einfach lauffähig compilieren kannst. Dafür musst du sie entweder in ne DLL oder eine richtige Exe "tun".
Das was du vorhast, wenn ich es richtig verstanden habe, geht vielleicht über Scripts, aber davon hab ich keine Ahnung.

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 2. Jul 2003, 21:50
Hiho

@S - tefano: Hmm... ne eigentlich wollte ich das nicht über text-files oder dll´s machen. Es muss doch möglich sein, wenn ich hier auf meinem PC den Server laufen lasse, bei meinem Bruder drüben den Client, dass wenn ich hier in meinem Programm sage, führe z.B.
Code:
 ShellExecute(Handle, nil, 'C:\WINDOWS\NOTEPAD.EXE', nil, nil, SW_SHOW);
aus, dass dann drüben bei meinem Bruder das Notepad aufgeht ...


so hatte ich das gemeint! Ist das verständlicher ?!?

Wie funktioniert sowas ?!?


danke

Trouble_Maker
  Mit Zitat antworten Zitat
moori

Registriert seit: 14. Jun 2003
36 Beiträge
 
Delphi 4 Professional
 
#4

Server-Client Kommunikation

  Alt 2. Jul 2003, 22:26
Hallo Trouble Maker!

Wenn ichs richtig verstehe, willst du einen anderen Rechner "quasi" fernsteuern??

Im Grunde muss der Client nur auf Befehle reagieren können. Das heist, der Client braucht einen "Befehlsinterpreter" er muss eine "Aufforderung" von einer "Nachricht" unterscheiden können.


Du brauchst so eine Art Protokoll für deinen Client.

'Empfänger' Trennzeichen 'Definition' Trennzeichen 'Befehl' Trennzeichen 'Beschreibungen'


>>> Sender übermittelt an Empfänger >>>
Code:
'192.192.192.1|command|execute|c:\windows\notepad.exe'
Empfänger erkennt an "command" durch eine "CASE-Schleife" das er einen Befehl ausführen soll. Und zwar "EXECUTE". Die auszuführende Datei findet er gleich im Anschluss.

Auf "execute" reagiert er mit einer prozedur (z.B. die du gepostest hast). Dannach soll er eine Rückmeldung an den Sender geben.

<<< Empfänger übermittelt an Sender <<<
Code:
'192.192.192.2|command|showmessage|befehl ausgeführt'
Der Sender Client erkennt, dass er was Tun soll, und führt den Befehl showmessage aus und zeigt den Text 'Befehl ausgeführt' an.


Ich hoffe das hilft dir etwas weiter, auch wenn es nur schwer zu verstehen ist.
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#5
  Alt 3. Jul 2003, 13:42
Hi,

@Trouble_Maker:
Hm, dann habe ich das was ich verstanden hab nur falsch wiedergegeben. Ich meinte es so, wie du es beschrieben hast.
Leider geht es so nicht. Moori hat da schon einen Weg genannt. Ich weiß nicht obs der einzige ist, aber mir würd kein anderer einfallen.
Dass du für deine Befehle eine Art Interpreter brauchst, der aus Nachrichten herausliest was er ausführen soll, beschränkt deine Möglichkeiten.
So kannst du dem Client nämlich nicht irgendwelche neu ausgedachten Befehle schicken. Alles was er ausführen können soll musst du im Interpreter erst vorbereiten, also z.B. die Prozeduren für die Befehle die du sendest müssen schon da sein, weil der Interpreter nur etwas ausführen kann, was er auch kennt.
So einen Interpreter kann man in den meisten Fällen entweder mit gaaanz vielen Ifs machen, also z.B.

if CommandString = 'ProgrammAusfuehrenthen ... ,

oder etwas bequemer per Case.
Dafür musst du deinen Befehlen aber Kennziffern geben. Also z.B. für "ProgrammAusfuehren" einen Integer mit dem Wert 1, für "ZeigeEineMessageBox" nen Integer mit dem Wert 2.
Das erreichst du entweder, indem du schon beim Senden des Befehls den jeweiligen Integer per inttostr in die Befehlskette schreibst, oder indem du dir ne Prozedur machst die aus den einzelnen verschiedenen CommandStrings eindeutige Integers macht, damit du dann damit im Case arbeiten kannst.
Erste Möglichkeit hat den Vorteil dass du keine so lange Prozedur schreiben musst die dir die Befehle anhand der Strings als Integers zurückgibt, hat allerdings den Nachteil dass die Befehle auf beiden Seiten die selben Nummern haben müssen.
Dementsprechend umgekehrt sind diese Argumente für die zweite Möglichkeit anzubringen.
Naja, und wenn du dann erstmal die Nummern der Befehle kennst, kannst du anstatt obigen Ifs bequem mit Case arbeiten:

Delphi-Quellcode:
case BefehlsNummer of
  1: begin
       ...
     end;
  2: begin
       ...
     end;
end;
Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von Trouble_Maker
Trouble_Maker

Registriert seit: 30. Jan 2003
244 Beiträge
 
Delphi 6 Personal
 
#6
  Alt 3. Jul 2003, 14:01
ahh ... genau das hab ich gemeint mit dem "fernsteuern"!

danke für eure Ansätze ...



Trouble_Maker
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz