AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi *gelöst* Delphi Programm <-> Web Oberfläche //Kommunikation?
Thema durchsuchen
Ansicht
Themen-Optionen

*gelöst* Delphi Programm <-> Web Oberfläche //Kommunikation?

Ein Thema von Darkface · begonnen am 25. Mai 2009 · letzter Beitrag vom 8. Mai 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Delphi Programm <-> Web Oberfläche // Kommunikatio

  Alt 26. Mai 2009, 14:58
Zitat:
Noch nie davon gehört
Dann erstelle mal eine ActiveX-Bibliothek (Datei--> neu -->...)
Speichere sie gleich als neues Projekt irgendwo ab (z.B. PTest).
Danach erstelle gleich ein Automatisierungsobjekt (vielleicht reicht auch ein COM-Objekt) (auch über Datei-->neu -->...)
Da kannst du dir einen Namen der Klasse aussuchen (z.B. TestButton)
Im Fenster der *.tlb gibst du dem Interface ITestButton eine neue Methode (z.B. Button1Click)
Dann drückst du auf Aktualisieren und gelangst in eine Unit. hier kannst du die angelegte Methode mit Leben füllen (z.B. ein LogFile schreiben).
Am Ende erzeugst du noch das Projekt und drückst anschließend in dem *.tlb-Fenster auf Registrieren.

Jetzt kannst du ja mal in deinem PHP Script folgendes probieren:
Code:
$obj = new COM("PTest.TestButton");
$obj->Button1Click;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#12

Re: Delphi Programm <-> Web Oberfläche // Kommunikatio

  Alt 26. Mai 2009, 22:10
Also ich bin mal an der mir schlüssigsten Variante dran geblieben (Real-TTX -> TCP Server).

Ich habe also mein XAMPP geschnappt, den Quellcode von Real-TTX in eine index.php datei geworfen...

Zitat von Real-TTX:
Hier ein PHP Beispiel für den Zugriff auf dein TCP Server :
Code:
&lt;?php
$port = 21000; // &gt;1024
$fp = fsockopen("tcp://127.0.0.1&quot;, $port, $errno, $errstr); // Verbindung aufbauen
if (!$fp) {
    echo &quot;ERROR: $errno - $errstr&lt;br /&gt;\n&quot;; // Falls ein Fehler aufgetreten ist
} else {
    fwrite($fp, &quot;help\n&quot;); // Hier der String der an dein Delphiprogramm gesendet werden soll (Vorzugsweise noch ein CR)
    echo fread($fp, 26); // Hier wird die Antwort ausgegeben
    fclose($fp);
}
?&gt;
Dann das Delphi Program -> TCP Server lauscht auf Port 21000.

Also habe ich das Programm gestartet und den Server Verbunden. Anschließend die php aufgerufen. Im Delphi Programm wurde auch das TcpServer1Accept Event ausgelöst. Jedoch kann ich den Text der gesendet wird nicht empfangen.

Das Programm und die php sind im Anhang. Bei Aufruf der php wird ledeglich die MessageBox('Empfang') angezeigt, die MessageBox die danach kommen sollte (mit dem Empfangenen Text) nicht. Als würde er unendlich lang Empfangen und nie etwas ausgeben ...

Könnte mir da jemand einen Wink geben was falsch sein könnte?

Für die die nicht downloaden wollen auchnochmal das TcpServer1Accept Event:

Delphi-Quellcode:
procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var s:string;
begin
  ShowMessage('Empfang');
  s:=Clientsocket.Receiveln;
  ShowMessage(s);
end;
Danke & Gruß
Angehängte Dateien
Dateityp: rar tcp_server_193.rar (185,9 KB, 5x aufgerufen)
Dateityp: txt index_950.txt (227 Bytes, 5x aufgerufen)
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#13

Re: Delphi Programm <-> Web Oberfläche // Kommunikatio

  Alt 26. Mai 2009, 22:33
Ok, Fehler gefunden:

Code:
<?php
$port = 21000;
$fp = fsockopen("tcp://127.0.0.1", $port, $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr
\n";
} else {
    fwrite($fp, "hi");
    //echo fread($fp, 26); [b]<--- das darf nicht sein da er sonst wartet und wartet und den fclose befehl nicht ausführt[/b]
    fclose($fp);
}
?>
ABER: Die Nachricht wird zwar übertragen aber es kommt häufig zu Bugs, da sind Beispielsweise die Messageboxen überlang ...
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#14

Re: Delphi Programm <-> Web Oberfläche // Kommunikatio

  Alt 26. Mai 2009, 23:46
So nach ausreichend langen Tests ist diese Art der Übertragung absolut Funktionstüchtig ich bin begeistert !

Dieser Messagebox Bug war nach Neustart von Delphi & neu kompilieren weg ^^.

Außerdem habe ich meinen Browser veranlasst in einer Dauerschleife die Zahlen von 1 bis 50 in jeweils einer Zeile zu senden, habe diese dann vom Programm einlesen und auf Übertragungsfehler überprüft. Als mir mein Programm dann fröhlich meldete: "11743/11743 //Alle richtig" hab ichs dann auch geglaubt . Danke an Real-TTX für die TCP Server Idee die perfekt funktioniert!

Nochmal QuellText und im Anhang auch alle Dateien von der Funktionierenden Lösung:

PHP:
Code:
<?php
$port = 21000;
$fp = fsockopen("tcp://127.0.0.1", $port, $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr
\n";
} else {
    fwrite($fp, "Text der Übertragen werden soll");
    fclose($fp);
}
?>
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  If Button1.Caption='VerbindenThen //Falls nicht Verbunden
  begin
    TcpServer1.Active:=true; //Verbinden
    Button1.Caption:='Trennen'; //Button entsprechend umbenennen :D
  end Else
  begin //Falls Verbunden
    TcpServer1.Active:=false; //Trennen
    Button1.Caption:='Verbinden'; //Button entsprechend umbenennen :D
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TcpServer1.Close;
end;

procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var s:string;
begin
  s:=Clientsocket.Receiveln; //Zeile Empfangen...
  ShowMessage(s); //..und zweimal...
  Memo1.Lines.Add(s); //ausgeben
end;
Danke allen war ja am Ende ganz Simpel - Damit ist auch ein umfangreicheres Webinterface ohne Probleme sehr sehr einfach möglich!
Was haltet ihr von dieser Lösung? Gibt es villeicht noch Vorschläge zur Verbesserung?

Gruß
Angehängte Dateien
Dateityp: rar phpzudelphi_204.rar (195,2 KB, 28x aufgerufen)
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#15

AW: *gelöst* Delphi Programm <-> Web Oberfläche //Kommunikation?

  Alt 7. Mai 2013, 18:40
Der Beitrag ist zwar schon älter, aber vielleicht hat ja trotzdem jemand ein Beispiel, wie die TCP-Kommunikation von der Anwendung zur Weboberfläche abläuft.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#16

AW: *gelöst* Delphi Programm <-> Web Oberfläche //Kommunikation?

  Alt 8. Mai 2013, 07:37
Das Thema ist allerdings schon älter. Ich habe leider gerade keinen Zugriff auf mein altes Projekt.
Falls ich mich recht entsinne ist es aber darauf hinausgelaufen das das fSockOpen in PHP offen gehalten werden muss und lauscht während in Delphi über den TCP Socket eine Nachricht gesendet wird.
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#17

AW: *gelöst* Delphi Programm <-> Web Oberfläche //Kommunikation?

  Alt 8. Mai 2013, 08:30
Ich habe es so gemacht, dass ich von PHP aus ein Kommando oder Daten senden und eine Antwort abwarte (fread()). Macht einen stabilen Eindruck bis jetzt.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:22 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