[C/C++] Kommunikation zwischen 2 Programmen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von VitoCorleone, 26. Dezember 2009 .

  1. 26. Dezember 2009
    Kommunikation zwischen 2 Programmen

    Tag,

    folgendes, wie kann ich veranlassen, dass Programm A.exe mit B.exe kommuniziert?


    Bsp.:
    A.exe läuft bereits, soll also nicht erst zusammen mit Argumenten gestartet werden.
    Es tut nichts als auf einen Integerwert und einen String zu warten.
    Durch den Integerwert will ich bestimmen, was A.exe daraufhin tut; der String soll eine Authentifzierung sein.

    1 und korrekterString -> A.exe beendet sich
    2 und korrekterString -> A.exe gibt "Hallo Welt" aus
    3 und korrekterString -> A.exe liefert an den Sender, wenn möglich variabel, ansonsten statisch an B.exe, einen String "Hi" zurück.


    B.exe prompted für eine Auswahl zwischen 1,2 oder 3 und ließt daraufhin einen String ein.
    Der Auswahlwert und der String sollen jetzt an A.exe gesendet, im fall 3 auf einen String gewartet werden.


    Wie mache ich das nun, dass ich Dinge zwischen den beiden hin- und herwerfen kann?
     
  2. 26. Dezember 2009
    AW: Kommunikation zwischen 2 Programmen

    du könntest die strings auch in nen tmp-file speichern und a.exe bzw. b.exe in ner endlosschleife diese datei überwachen lassen.

    wenn tmp-file geändert
    -> datei auslesen, leeren und sperren
    -> inhalt verarbeiten
    -> ggf. wieder was reinschreiben
    -> datei entsperren
     
  3. 26. Dezember 2009
    AW: Kommunikation zwischen 2 Programmen

    filemaps
    sockets
    sendmessage an den windowmapper
    oder die eklige version von murdoc
     
  4. 26. Dezember 2009
    AW: Kommunikation zwischen 2 Programmen

    sockets sind genau das richtige dafür
     
  5. 26. Dezember 2009
    AW: Kommunikation zwischen 2 Programmen

    Besten Dank, ich versuch mich mal in Sockets einzulesen. BWs verteilt.
     
  6. 27. Dezember 2009
    AW: Kommunikation zwischen 2 Programmen

    sockets sind dafür eigentlich nicht gemacht ... ich würds übern wndproc oder filemaps tun
     
  7. 6. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    Wieso so Kompliziert und nicht einfach nur mit Variablen arbeiten ?

    Varible erhält wert, wird ausgelesen und auf Null gesetzt.
    solange Variable auf null ist, keine Aktion.

    wir haben früher für so etwas höchstens eine kleine Subroutine geschrieben.

    sollte hier aber nicht Notwendig sein.

    Jedes Programm bekommt eine Variable zum Schreiben und eine zum Lesen und auf Null setzen.

    Der Wert der Variablen kann dann eine Code für irgendeine Aktion darstellen.

    naja - bin nicht so bewandert, aber das wäre mein Ansatz

    grüz
    KK
     
  8. 6. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    Und wie und wann ändert sich die Variable? Woher soll das Programm wissen, wann es irgendwas ändern muss und wenn du nen Wert ausm Speicher für die Variable haben willst (zeiger) musst du ja wissen, wo dieser liegt.

    so darf man das verstehen, deine Variablen?
     
  9. 6. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    Benutzt doch einfach wie schon gesagt FileMaps, die kann man dan auch als "Variablen" benutzen.

    Hab vor einiger Zeit mal was programmiert gehabt (Delphi/Pascal Beispielcode), sollte auch in C++ umsetzbar sein:
    Spoiler
    Code:
    program sau;
    
    uses
     Forms, Windows,
     Unit1 in 'Unit1.pas' {Form1};
    
    {$R *.res}
    var
     hMapping: THANDLE;
    begin
     hMapping := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, 4, 'App UaS');
     GlobalWinHandle := MapViewOfFile (hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); //GlobalWinHandle in Unit1 deklariert
     try
     if GetLastError() = ERROR_ALREADY_EXISTS then
     begin
     SendMessage(GlobalWinHandle^, WM_SHOWMAINFORM, 0, 0);
     end
     else
     begin
     Application.Initialize;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
     end;
     finally
     UnmapViewOfFile(GlobalWinHandle);
     CloseHandle(hMapping);
     end;
    end.
    
    Wenig Code, große Wirkung. Der Codesnippet sorgte bei dem Programm dafür das beim ersten öffnen eine FilleMap angelegt wird und in dieser das Fensterhandle gespeichert wurde.
    Und beim ernauten öffnen, wenn schon eine Instanz lief, wurde halt das Programm nicht zum zweiten mal geöffnet sondern das bereits geöffnete mit dem Fensterhandle in den Vordergrund genommen.

    Man sollte eigentlich genug Beispiele im INet finden für filemaps.

    Mfg Rushh0ur
     
  10. 7. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    selbst wenn du an die adressen der jeweils anderen variable kommst und in diese schreiben kannst wünsch ich dir viel spaß wenn du da was rausliest und der andere prozess in dem moment den inhalt überschreibt.
     
  11. 7. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    Die Idee von KalleKlawitter ist schon in Ordnung.
    SharedMemory, den gleichzeitigen Zugriff per Mutex/critical sections verhindern und Signalisierung über Semaphore.

    Aber eigentlich bieten sich bei deinem Problem eher Sockets an... Der eine Prozess hört auf einem Port, der andere verbindet sich mit diesem und sendet dann die Daten.
     
  12. 7. Januar 2010
    AW: Kommunikation zwischen 2 Programmen

    Imho die einfachste und schönenste Variante die man verwenden kann.
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.