Datenaustausch zwischen zwei Programmen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Datenaustausch zwischen zwei Programmen

Beitrag von DL3AD »

Hallo,

ich möchte einen einfachen Datenaustausch zwischen zwei Programmen ohne Verzögerung realisieren - es sind lediglich zwei Strings.
Programm A schreibt ein eine INI-Datei und Programm B kann die INI lesen und auch umgekehrt.
Kann man das so machen oder gibt es elegantere (infachere) Lösungen ?

Gruß Frank

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

Re: Datenaustausch zwischen zwei Programmen

Beitrag von theo »

Schau mal auf den "System" Tab bei Komponenten.
Dort gibt es TSimpleIPCClient und TSimpleIPCServer.
Die sind für so etwas gedacht.

DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Datenaustausch zwischen zwei Programmen

Beitrag von DL3AD »

Hallo theo,

Danke für den Tipp - leider ist wenig Information dazu verfügbar - gibt es irgentwo ein Beispiel ?
Wenn ich einen bidirektionalen Info Austauch brauche - muss dann auf jeder Seite ein Server und Client sein ?

Gruß Frank

AndreasMR
Beiträge: 94
Registriert: Di 4. Aug 2015, 15:29
OS, Lazarus, FPC: Linux, Raspbian, Windows
CPU-Target: 64/32 Bit

Re: Datenaustausch zwischen zwei Programmen

Beitrag von AndreasMR »

Hallo DL3AD,

eine andere Möglichkeit besteht über Sockets. Ein gutes Beispiel inkl. Tutorial findest Du in der Komponente lNet.

Eine weitere Möglichkeit besteht in der Verwendung von "named pipes" (unter Linux).


Beste Grüße

Andreas
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0

Michl
Beiträge: 2338
Registriert: Di 19. Jun 2012, 12:54

Re: Datenaustausch zwischen zwei Programmen

Beitrag von Michl »

DL3AD hat geschrieben:Danke für den Tipp - leider ist wenig Information dazu verfügbar - gibt es irgentwo ein Beispiel ?

Beispiele findest du eine Menge in den Foren. Bei der Standard-Lazarus-Installation sind auch Beispiele unter fpc\3.0.4\source\packages\fcl-process\examples dabei.


Eigentlich geht das in einer GUI ganz einfach, wenn sie Nachrichten empfangen soll (GUI_1), einfach ein TSimpleIPCServer auf dem Formular ablegen, Global auf True, eine ServerID vergeben und Active auf True stellen.

Wenn die GUI Nachrichten senden soll (GUI_2), einfach ein TSimpleIPCClient auf dem Formular ablegen, ServerID angeben, welcher die Nachricht empfangens soll, und Active auf True.

Jetzt kann man (GUI_2) per SimpleIPCClient1.SendStringMessage('Hallo Welt'); eine Nachricht senden und in Event SimpleIPCServer1.OnMessage (GUI_1) empfangen (und z.B. ausgeben).

DL3AD hat geschrieben:Wenn ich einen bidirektionalen Info Austauch brauche - muss dann auf jeder Seite ein Server und Client sein ?

Ja

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

DL3AD
Beiträge: 434
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Datenaustausch zwischen zwei Programmen

Beitrag von DL3AD »

Hallo,

Danke für eure Antworten.
Ich werde dann auf Sockets setzen - dass habe ich schon gemacht, Client seitig mit Synapse.
Nun muss ich mal schauen wir ich einen Server (nur für eine Verbindung) realisieren kann.
Ein simples UDP sollte ja reichen auf dem localen Rechner.

Gruß Frank

Antworten