Emulator-Programm

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Strings kannst du, wenn die Verbindung besteht, über den Clienten einfach über SendMessage() senden.
( http://www.freepascal.org/docs-html/fcl ... lient.html" onclick="window.open(this.href);return false; )

Außerdem musst du beim Server dann das Ereignis am Server über OnMessage abfangen und entsprechend auswerten/ausgeben.

Code: Alles auswählen

procedure TForm1.IPCMessage(Sender: TObject);
begin
  Memo1.Lines.Add(IPCServer.StringMessage);
end;
( http://www.freepascal.org/docs-html/fcl ... erver.html" onclick="window.open(this.href);return false; )
Johannes

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Monta,

das war genau daas was ich auch probiert habe.
Wie konvertiert man einen String in einen Stream?
procedure TSimpleIPCClient.SendMessage(MsgType: TMessageType; Stream: TStream);

Kommt am Client nichts an!
procedure TSimpleIPCClient.SendStringMessage( const Msg: String );

Was will er da für Argumente?
procedure TSimpleIPCClient.SendStringMessageFmt( const Msg: String; Args: array of Const );

Danke
BerLin

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

SendStringMessage müsste aber gehn...

Ich hab gerade noch nen ganz einfaches Beispiel gefunden, vielleicht hilfts dir ja weiter, auch wenns nur Kommandozeilenprogramme sind, die Funktionsweise sollte klar werden. Und sollte problemlos auch unter Linux kompilierbar sein, habs nur mit Windows getestet.
Dateianhänge
ICP.zip
ICP-Kommandozeilen-Demo
(2.47 KiB) 164-mal heruntergeladen
Johannes

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo,

ich habe das Problem ausgemacht. Mein Programm funktioniert nicht unter Linux! Zu mindest nicht unter OpenSuse 10.3 und Lazarus 0.9.22. Unter w2K funktioniert es.

Ich werde das noch genauer untersuchen
BerLin

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:Lese doch ab und zu mal meine Antworten ...
Es wäre viel einfacher, wenn Deine Antworten interpretierbare Referenzen und nicht nur globale Hinweise zum Selbststudium enthalten würden. Aber natürlich hast Du recht, dass "TSimpIePCServer" und "TSimpIePCClient" in "Sytem" genau diese Funktionalität zur Verfügung stellen.

Da ich ja anerkannt ignorant bin, habe ich natürlich auch keine irgendwie geartete Hilfe zu dem Thema gefunden. (Mir bleibt normalerweise nur die Arbeitsweise, zusätzlich zu Lazarus auch Turbo-Delphi (kostenlos) gestartet zu haben, um dort Hilfe zu den VCL/LCL und RTL Komponenten zu finden, die ja zum grössten Teil gleich heißen. Aber da ist TSimpleIPCClient und TSimpleIPCServer natürlich nicht zu finden, weil es ja eine geniale Erweiterung der Free Pascal RTL ist.

>>> Später: einfach F1 auf dem Wort "TSimpleIPCClient" liefert immerhin eine Liste der Parameter mut kurzer Beschreibung ! Da war ich wirklich 'mal wieder zu ignorant... <<<

Netterweise hat Monta aber ein Beispiel ausgegraben, das zeigt, wie man die Komponenten benutzen kann.

Ich hab erstmal in Windows getestet versuche nun herauszubekommen, ob es auch für Linux implementiert ist (und wie die Implementierung in beiden Fällen genacht ist). Ich habe aber hier momentan kein lauffähige Linux zur Verfügung und habe deshalb im Sourcecode 'rumgesucht, bin aber bisher nicht tiefer als simpleipc.pp gekommen.

Wenn ich steppen will kommt immer die Meldung, dass irgendwelche inc-Dateien nicht gefunden werden. Deshalb kann ich in der RTL nicht debuggen (das Problem hatte ich bei der vorigen Lazarus-Version nicht). Warum ist das so (die pp-Dateien werden prima gefunden) ? Wie kann man das verhindern ?

-Michael

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo,

so wie versprochen habe ich eine Demo erstellt. Sie kommt meiner Anwendung sehr nahe.
Ein Sever der die aktuelle Uhrzeit zum Clienten schickt und vom Clienten die Uhrzeit +1h Stunde zurück bekommt.
Schade das Linux-Variante nicht funktioniert!

Vielleicht findet jemand den Bug!
Gruß
BerLin
Dateianhänge
source.zip
(7.09 KiB) 90-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Bei mir funzt dein Beispiel auf Linux auch nicht. Aber dieser Test hat geklappt:

Code: Alles auswählen

procedure TForm1.SimpleIPCServer1Message(Sender: TObject);
begin
  Memo1.Lines.Add(SimpleIPCServer1.StringMessage);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  SimpleIPCServer1.StartServer;
  Closeing:=False;
  Repeat
   SimpleIPCServer1.PeekMessage(1,true);
   Application.ProcessMessages;
  until Closeing;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  SimpleIPCClient1.Connect;
  SimpleIPCClient1.SendStringMessage('testen');
  SimpleIPCClient1.DisConnect;
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  Closeing:=True;
end;
ServerID und Global habe ich im Obj-Inspektor gesetzt.

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Theo,

ich habe eben dein Beispiel probiert, es funktioniert auch nicht richtig .Innerhalb eines Programms ja, zwischen 2 Programmen nein.
Ich würde jetzt doch gerne auf TCP/IP umsteigen. Es läßt sich programmieren, wenn man 2 Rechner gleichzeitig zur Verfügung hat. Ich habe mir bereits das Synapse TCP/IP library heruntergeladen. Nun hab ich leider noch keine Idee wie ich anfangen soll. Ich weiß, daß ich den localhost benutzen kann für einen Rechner.
Das Paket ist sehr umfangreich,..

Für gute Ratschläge bin ich mal wieder shr dankbar
BerLin

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

BerLin hat geschrieben: Das Paket ist sehr umfangreich,..
Es gibt ein viel kleineres Paket, dass dabei auch noch visuelle Komponenten hat. Kann aber nur TCP und UDP, keine speziellen Protokolle. Habe hier jetzt nicht im Kopf wie es heißt, Im Büro habe ich ein Beispiel.

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

BerLin hat geschrieben: ich habe eben dein Beispiel probiert, es funktioniert auch nicht richtig .Innerhalb eines Programms ja, zwischen 2 Programmen nein.
Bei mir funzt das. Bist du sicher das du im ObjInspektor zweimal die GLEICHE ServerID eingesetzt hast und Global auf true steht?
BerLin hat geschrieben: Ich würde jetzt doch gerne auf TCP/IP umsteigen.
Schau dir mal die Echo Demo von Synapse an.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

theo hat geschrieben:
BerLin hat geschrieben:ich habe eben dein Beispiel probiert, es funktioniert auch nicht richtig .Innerhalb eines Programms ja, zwischen 2 Programmen nein.
Bei mir funzt das.
Bei mir auch (zwischen zwei Programmen. Ich habe einfach das mitgelieferte Beispiel getestet.)
-Michael

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo,

und danke für eure Tipps, ich komme vermutlich erst am Wochenende zum testen.

Bis dahin
BerLin

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

BerLin hat geschrieben:ich komme vermutlich erst am Wochenende zum testen.
Dann kannst Du ja neben SimpleIPC ja auch INET (wird beim neusten Lazarus - glaube ich- automatisch mit installiert) testen. Sollte genauso einfach zu verwenden sein.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Nachdem ich vor einigen Tagen SimpelIPC auf Windows erfolgreich getestet habe, habe ich nun einen Test auf Linux gemacht.

Das Beispielprogramm ließ sich übersetzen, aber die Message kommt nicht beim Empfänger an (Keine Fehlermeldung).

Was kann da falsch sein ?

-Michael

BerLin
Beiträge: 50
Registriert: So 17. Jun 2007, 16:51

Beitrag von BerLin »

Hallo Michael,

das Problem kenne ich. Mein obiges Beispiel Clock-Server funktioniert auch unter Linux nicht, im Gegensatz zu w2k.
Wenn Du im /tmp Verzeichnis schaust gibt es da eine Server bezogene Pipe.
Danach verließen sie ihn.

Es dürfte sich auch nicht um ein Rechte-Problem handeln da ich beide Programme als gleicher User gestartet habe.

Gruß
BerLin

Antworten