Kommunikation zwischen mehreren eigenen Tools ... Womit?
Hallo Wissende,
ich habe mehrere Tools, die sich untereinander Daten austauschen sollen. Bisher habe ich es so gelöst, dass ich die Parameter per ShellExecute übergeben habe. Dies setzt jedoch voraus, dass das andere Tool, welches die Daten erhalten soll nicht gestartet ist, oder es wird eine neue Instanz erzeugt. Wenn ich nun Inhalte an meinem Hauptprogramm ändere und diese erneut senden will, würde ja das empfangende Tool erneut gestartet werden. Ich will aber lieber nur die aktualisierten Daten senden und das Tool "fischt" sich selbst raus, was neu ist und aktualisiert seine Inhalte. Das dürfte wohl mit ShellExecute nicht laufen. Oder? Es gibt für mich daher 2 sichtbare Wege. Ich könnte die Daten per UDP senden oder mittels TCP/Ip übertragen. Was würdet Ihr preferieren? Und - Gibt es auch andere Möglichkeiten? Das ganze soll nicht nur bei mir laufen, sondern auch bei Kunden installiert werden. Daher auch die Frage, ob es überall möglich ist diese Kommunikation so zu betreiben...Die Tools sollen nicht im Netzwerk miteinander kommunizieren, sondern nur lokal auf einem PC. Gibt es sonst noch wichtige Dinge, die ich beachten muss? |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
ich würde auch NamedPipes in betracht ziehen
und wenns nur lokal ist, könntest es auch mit MMF bzw. WM_COPYDATA machen (oder "normalen" Windows Messages - je nachdem wieviel daten) |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Named Pipes, Zwischendateien, Datenbank, Messages, ...
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Also das mit TCP/IP solltest Du vergessen.
Es kann sein, dass auf einem Kunden-PC kein Netzwerk installiert ist. Dann funktioniert TCP/IP nämlich nicht korrekt oder garnicht. Am einfachsten tust Du Dir vermutlich mit Windows-Messages. Dann ist das Thema NamedPipes sicher noch interessant. Etwas veraltet aber dennoch perfomant sind die Mailslots. Als Schlagwort kann ich auch noch IPC (Inter Process Communication) einwerfen. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
Also dann dürfte es theoretisch nicht funzen wenn ich das Netzwerkkabel zieh? |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
Es muss also die Karte drin sein, die Treiber müssen installiert sein, TCP/IP muss konfiguriert sein, der Netzwerk-Stecker muss eingesteckt sein. Ansonsten ist die TCP/IP-Kommunikation deaktiviert. Versuch doch mal folgendes: An einem Netzwerk-PC den Netzwerk-Stecker rausziehen. Dann ein ipconfig /all auf der Console machen. Und auch einen ping auf die eigene Adresse absetzen. Als letztes kannst Du auch die ganzen net abc Befehle ausprobieren auf der Console. Nun wirst Du vermutlich sehen, dass das Netzwerk (und auch TCP/IP) deaktiviert wurde. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Also hat der lokale Apache nix mit Netzwerk zu tun, denn da komm ich auch über 127.0.0.1 auf meine Seiten wenn kein Netzwerk da ist :gruebel:
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
auf 127.0.0.1 kommst Du immer, wenn das Netzwerk installiert ist. Dazu brauchst Du kein Netzwerkkabel. Bau mal aus dem Rechner die Netzwerkkarte aus und schmeiss alle Treiber für die Netzwerkkarte raus. Dann dürfte auch 127.0.0.1 nicht mehr gehen. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Also, ich hatte jahrelang einen Rechner ohne Netzwerkkarte. Trotzdem konnte ich Verbindungen zu Loopback-Adressen (127.0.0.X) aufbauen (ich habe damals mit den Socket-Komponenten experimentiert). AFAIK hat es nur damit zu tun, ob das TCP/IP-Protokoll installiert wurde (seit Win95 Standard).
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Ich wollte das ja auch über die Socket-Komponenten lösen, bin aber jetzt dabei mir allen möglichen Code aus dem Forum zusammen zu suchen, mit dem ich das Senden der Nachrichten, welche zu 99% aus Strings bestehen, zu realisieren.
Scheint aber doch nicht sooo einfach wie gedacht, da ich ja erstmal das Handle des Programmes herausfinden muss, welches ich ansprechen will. Dazu habe ich nun Code gefunden. Dann sende ich mit folgendem Code:
Delphi-Quellcode:
Leider kommt nichts an...Naja, vielleicht finde ich noch was passendes...
//Senden aus Tool A
TheWindowHandle:=GetWindowHandleByExeName('Programmname.exe'); if TheWindowHandle = 0 then //wenn das programm noch nicht läuft, starte es ShellExecute(Application.Handle, 'open' ,PChar((sender as TMenuItem).Hint), nil, nil, sw_ShowNormal); wparam:=globaladdAtom(pchar(str_param)); lparam:=length(str_param); SendMessage(TheWindowHandle,WM_User+10,wparam,lparam); GlobalDeleteAtom(wparam); //Empfangen in Tool B procedure TForm1.Receive(var msg:TMessage); var s:string; l:cardinal; begin ShowMessage('kommt was!'); SetLength(s,msg.lparam); l:=GlobalGetAtomName(msg.wparam,@s[1],msg.lparam+1); setlength(s,msg.lparam); ShowMessage(s); end; |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Warum arbeitest Du Dich nicht in die Themen
NamedPipes MailSlot ein? Da brauchst Du dann kein Handle der Applikationen und musst die Tools nicht ständig neu starten. Du legst eine NamedPipe oder MailSlot an, machst das im anderen Programm bekannt, steckst Daten rein und die kommen automatisch auf der anderen Seite an. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Weil ich dazu kein Tut oder brauchbares Beispiel gefunden habe.
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Also ich mach meine Kommunikation immer über TCP/IP und gehe einfach davon aus das dies läuft. Hatte bisher auch keine Probs damit.
Da legst du einfach für jedes Prog einen Port fest auf welchem es "wartet", connectest dann und kannst dann ganz einfach Strings senden und empfanegn wie du lustig bist. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Danke für die Links.
Ich habe mir mal die Pipes.zip gezogen und die Komponente installiert. Allerdings gibt es absolut keine Doku dazu. Ich habe zwar gefunden, dass man wahrscheinlich Daten mit Write() senden kann, aber die ganzen Parameter, die man da angeben muss, sind für mich schon wieder eine Hürde mehr. Ich mal versuchen überhaupt erstmal eine Verbindung herzustellen... Vielleicht finde ich ja was...raus. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Im gleichen Thread, wo Du die Komponente gefunden hast, ist auch ein Beispielprojekt dabei.
Aber Du kannst NamedPipes auch ohne Komponenten ansprechen. Dann musst Du halt alles von hand machen, ist aber nicht aufwändig. Bei Delphi sind bestimmt auch Demo-Projekte zu Pipes dabei. Ansonsten werden die in jedem besseren Delphi-Buch erwähnt. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
Zitat:
Zitat:
Ich würde ja gerne die NamedPipes nehmen, aber es funktioniert einfach nicht! Weder mit den Codes, die ich hier im Forum fand, noch mit der Komponente. Bei letzerer weiss ich allerdings nicht, wie man sie einsetzt. Wäre es so einfach wie es aussieht, wäre das schon toll. Ich will doch nur Strings zwischen den Programmen austauschen. Warum ist das soo kompliziert? |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Liste der Anhänge anzeigen (Anzahl: 3)
Schau Dir mal die drei angehängten Files an.
Die sollten so eigentlich zusammenpassen. Hab ich auch hier in DP gefunden, sind also nicht von mir. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
SHARED MEMORY!
Viele Programme, die Daten von Plugins oder anderen Programmen bekommen, arbeiten damit: MBM, Speedfan, Everest, Samurize, Rainmeter, Rivatuner, LCDsmartie, LCDhype, ATItools etc. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
Das wäre das letzte, das ich benutzen würde. :warn: Denn jedesmal wenn das SharedMamory angepasst wird, müssen alle Applikationen neu erstellt werden. :roteyes: :roteyes: |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Danke für Deine Mühe, aber es funktioniert einfach nicht. Ich habe die Komponenten installiert und anschliessend den Server und den Client kompiliert, alles ohne Änderungen!
Danach habe ich den Server gestartet und aktiviert. Anschliessend habe ich den Client gestartet und die Checkbox RUN aktiviert. Das Programm steht eine Weile still, wohl weil es versucht sich zu connecten und dann schreibt der Client in seine Liste: Could not Create Pipe Instance 1 of 53... UND NUN??? |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Ursachenforschung?
Vielleicht musst Du es noch an Dein System / Umgebung anpassen? Ich hab das Zeugs schon länger mal runtergeladen, weil ich's vielleicht mal brauchen könnte. Angeschaut oder verwendet hab ich es allerdings noch nie. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Tscha Kinners. Ich habe leider keine Ahnung. Der Code in dem Client läuft über nen Timer. Warum weiss ich auch nicht. Eigentlich dachte ich, dass der Client sich von selbst meldet, wenn er eine Nachricht erhält, aber dem ist wohl nicht so...
Der Server zeigt auch nicht wirklich an, dass er eine Verbindung zum Client hat. Also wenigstens funktioniert es so ganz und gar nicht. Und um auf Deine Frage einzugehen: Was sollte ich denn noch auf meinem System anpassen müssen? |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich hab das gerade mal bei mir getestet, es geht wenn man als Servernamen einen "." einträgt. Warum kann ich auch nicht genau sagen. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
z.B.: - Variablen hinzugefügt - Typen verändert - Länge von Variablen verändert |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Zitat:
Hab ich auch nicht dran gedacht. Bzw. hast Du ja den Fehler nicht in diese Richtung beschrieben... |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Stimmt! Wenn ich meinen Rechnernamen eintrage dann gehts auch!
afaik Das ganze geht auch im Netzwerk? :gruebel: |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Wenn konfiguriert und freigegeben, dann ja :zwinker:
|
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Ja, NamedPipes funktionieren auch im Netzwerk.
MailSlots prinzipiell auch, dafür benötigt man aber dann eine Netzwerk-Domäne oder Workgroup. |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Also das ist doch aber als Vorgabe eingestellt.
Server: Name = gnsPipeServer1 Pipename = Test Client: Name = gnsPipeClient1 PipeName = test Server = . //ist Vorgabe Bei mir gehts nicht...Fehler wie oben schon beschrieben... |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Ich nehme alles zurück ab Guten Morgen!!!
Ich habe das Bild erst eben gesehen, WO ich den . eingeben muss und dann gehts wirklich!!! |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Hi torud,
jetzt muß ich hier auch mal meinen Senf dazu geben. Auch wenn ich RavenIV's Meinung schätze, kann ich seine Aussagen zu TCP/IP nicht unterstützen. Ich halte sie sogar für grund falsch! Die Funktionsfähigkeit von TCP/IP auf einem Rechner ist vorrangig an die Installation gebunden. Ob die Netzwerkkarte aktiv ist, ist dabei nicht relevant. Ich kann auch einen virtuellen WAN-Treiber installieren und TCP/IP funzt. Das bei gezogenem Netzwerkkabel ab XP die Netzwerkkarte deaktiviert wird und somit die eingetragene IP-Adresse nicht mehr gültig ist verhindert trotzdem nicht den Zugriff auf 127.0.0.1 (LocalHost). Damit kann ich dann locker jeden Socket-Server auf meinem Rechner erreichen. Ich muß auch ehrlich sagen, dass ich seit Jahren keinen Rechner mehr ohne Netzwerk gesehen habe. Desweiteren finden sich haufenweise Tuts und Beispiele für Socket-Verbindungen. Die Handhabung ist imho simpel. Damit will ich nicht sagen, dass es Pipes nicht tun, aber einen Blick sind die Sockets schon wert. Gruß oki |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Ciao Oki,
"lange" nichts von Dir gelesen. Ich glaube seit den CustomControls!? :lol: Hätte das heute vormittag schon gelesen, hätte ich es direkt mit den Socket-Verbindungen gemacht, da ich dies schon des öfteren so gehandhabt habe - dies aber immer auf Firmeneigenen PC´s, wo die Hardwareumgebung bekannt ist bzw. notfalls angepasst wurde. Ich möchte jetzt nicht Ravens Bemühungen durch sofortiges Abwenden von den NamedPipes untergraben und werde mich also noch ein wenig quählen. Damit ich nun endlich ans Ziel komme, müsste ich nur noch wissen, wie ich an den gesendeten Inhalt komme, denn gesendet wird ja, so wie ich das überblicke, immer das gesamte Alphabet, aber der Server zeigt nut die empfangenen "Pakete" an. Diese Procedure hängt am Server und sollte mir eigentlich auch den geschickten Content liefern können....Oder!?
Delphi-Quellcode:
procedure TForm2.gnsPipeServer1ProcessMessage(Sender: TObject;
aByteArray: Pointer; BufferSize, InCount: Cardinal; var OutCount: Cardinal; var DisconnectClient: Boolean); var I: Cardinal; Temp: TByteArray; begin lbl_count.Caption := IntToStr(Succ(StrToIntDef(lbl_count.Caption, 0))); for I := 0 to Pred(InCount) do Temp[I] := TByteArray(aByteArray^)[Pred(InCount - I)]; for I := 0 to Pred(InCount) do TByteArray(aByteArray^)[I] := Temp[I]; end; |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Hi torud,
sorry, aber ich bin bei den Pipes nicht so fitt. Ich wollte die auch nicht schlecht machen, sondern nur die Aussage gegen die Sockets korrigieren. Wenn das mit den Pipes klappt, mach es, denn die Sockets haben auch ihre Tücken. Gruß oki [OT] Hat das mit den Controls geklappt? [/OT] |
Re: Kommunikation zwischen mehreren eigenen Tools ... Womit?
Hi Oki,
Danke für Dein Feedback. Ich werde noch etwas damit versuchen und wenn es klappt, dann würde ich die Pipes den Sockets vorziehen, da ich hier auch den Server nach dem Client starten könnte. [ot] Die Controls habe ich weiter gebaut, aber es gibt noch diverse Probs. Ich werde in dem Thread nochmals posten. [/ot] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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