AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kommunikation zwischen zwei Delphiprogrammen
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen zwei Delphiprogrammen

Ein Thema von rwb · begonnen am 26. Nov 2022 · letzter Beitrag vom 17. Nov 2023
Antwort Antwort
Seite 1 von 2  1 2      
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#1

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 26. Nov 2022, 12:32
Auch das sollte mit ICS gehen oder vermutlich auch mit Indy, wenn es blockieren darf.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 26. Nov 2022, 12:54
Ich nutze hierfür Namend Pipes. Dafür gibt es eine Freeware Komponente, die das Ganze sehr einfach machen. Diese Freeware Komponente habe ich dir mal angehängt. Ich nutze dies schon sehr lange zum Steuern eines Windwosdienstes über ein Trayicon Programm.
Angehängte Dateien
Dateityp: pas RFNamedPipes.pas (53,9 KB, 88x aufgerufen)
Dateityp: pas RFNamedPipesObjInst.pas (7,3 KB, 76x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von rwb
rwb

Registriert seit: 28. Nov 2007
Ort: Tarmstedt
42 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 26. Nov 2022, 13:18
Ich bin begeistert, herzlichen Dank an alle.
Jetzt werde ich ersteinmal alle Vorschläge überdenken und habe dann bestimmt weitere Fragen.
Ich wünsche allen ein tolles bzw besinnliches Wochenende.

RWB
Das Leben ist Freude
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Jan 2023, 00:31
Ich nutze hierfür Namend Pipes. Dafür gibt es eine Freeware Komponente, die das Ganze sehr einfach machen. Diese Freeware Komponente habe ich dir mal angehängt. Ich nutze dies schon sehr lange zum Steuern eines Windwosdienstes über ein Trayicon Programm.
Funktioniert super - besten Dank!

Problem:
Es kann bei TPipeServer beim Beenden der Verbindung (Active := false) ein Speicherleck entstehen:
Soweit ich sehe passiert es, wenn ein TPipeClient Disconnect aufruft und TPipeServer "gleichzeitig" mittels Write diesem Client Daten D übermittelt und dann Active := false setzt.
In der Methode TPipeServer.Write wird via AllocPipeWrite für D Speicher reserviert. DisposePipeWrite wird aber für diesen Speicher dann nicht aufgerufen => Leck.
(EurekaLog 7.11.0.1)

Lösung:
Code der Komponente anpassen.

Workaround (Lösung wäre schöner ):
Bei 1-1 Verbindung: TPipeServer schliesst die Verbindung.
Bei 1-n Verbindungen: Flusskontrolle einbauen.
Michael Gasser

Geändert von Michael II (12. Jan 2023 um 00:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rwb
rwb

Registriert seit: 28. Nov 2007
Ort: Tarmstedt
42 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Jan 2023, 07:48
Moin Michael II,
wie benutze ich denn jetzt das Ganze?
Mein Programm(e) ist in der IDE, ich lade die beiden Dateien, nehme sie in die USES auf und dann?
Ratlos,
RWB
Das Leben ist Freude
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Jan 2023, 14:02
Hoi rwb,
falls du noch nie eine eigene Komponente erstellt hast, dann tu's mal - es macht Spass.
Zur Pipe: Wähle in deinem Delphi das Menu Komponente > Komponente installieren und füge RFNamedPipes.pas hinzu.
In RFNamedPipes.pas gibt's eine Procedure Register RegisterComponents('Win32', [TPipeServer, TPipeClient]);
Nach der Installation der Komponente findest du deshalb in der IDE in der Palette unter Win32 neu TPipeServer und TPipeClient.

Du hast zwei Apps 1 und 2, welche via Pipe kommunizieren sollen?
Knall auf 1 TPipeServer und auf 2 TPipeClient.
Setze die Eigenschaft PipeName in 1 und 2 auf den gleichen Wert.
Setze die Eigenschaft Active von TPipeServer auf true. TPipeServer wartet nun auf Verbindungsanfragen. TPipeClient kann mittels Connect verbinden.
Mit Write übermittelst du Daten. Auf der Gegenseite greifst du die empfangenen Daten im OnMessage ab.
Verbindung abbrechen:
Client seitig: Disconnet.
Server seitig: Active := false setzen (es gibt auch eine protected Methode, welche dich vielleicht interessiert, wenn du mehrere Clients hast und zu einem bestimmten Client die Verbindung kappen willst - schau in den Code)

Ich hoffe das hilft.
Michael Gasser

Geändert von Michael II (12. Jan 2023 um 14:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rwb
rwb

Registriert seit: 28. Nov 2007
Ort: Tarmstedt
42 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Jan 2023, 17:42
Hervorragend Danke
Das Leben ist Freude
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
548 Beiträge
 
Delphi 12 Athens
 
#8

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 14. Jan 2023, 16:04
Was ist mit dem App-Tethering? Das sollte doch auch funktionieren. Habe bisher wenig Erfahrung damit, nur mal ein Übungsbeispiel (Bild mit Handy fotografieren und dann zum Desktop schicken) das geht einwandfrei.

Oder gibt es damit Probleme die ich nicht kenne?
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Nov 2023, 03:25
Ich nutze hierfür Namend Pipes. Dafür gibt es eine Freeware Komponente, die das Ganze sehr einfach machen. Diese Freeware Komponente habe ich dir mal angehängt. Ich nutze dies schon sehr lange zum Steuern eines Windwosdienstes über ein Trayicon Programm.
Der verlinkte Code ist für Win32. Hat jemand diese beiden Files mal für Win64 übersetzt?

(Ich nutze diese Komponenten für die Kommunikation zwischen zwei Apps auf dem gleichen Gerät. Früher habe ich tcp via ICS verwendet; da gab's halt immer wieder Menschen, welche ihre Firewall o.ä. nicht bedienen konnten und sich aussperrten. => Der Support ist in diesem Bereich von mehreren Stunden pro Jahr auf 0 gefallen.)
Michael Gasser
  Mit Zitat antworten Zitat
superflexible

Registriert seit: 22. Okt 2019
3 Beiträge
 
#10

AW: Kommunikation zwischen zwei Delphiprogrammen

  Alt 12. Nov 2023, 21:26
Hi,
hier ist meine aktuelle 32+64-Bit-Version mit noch weiteren Verbesserungen und einem Beispiel-Programm.

Man kann das Programm mehrmals starten, um zu sehen, dass sich mehrere Clients mit demselben Server verbinden können.

https://github.com/superflexible/NamedPipesForDelphi

Ich habe eine ähnliche Unit auch für macOS/Linux, die mit Sockets arbeitet. Bei Interesse bitte nachfragen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz