AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Per WebInterface Programm steuern
Thema durchsuchen
Ansicht
Themen-Optionen

Per WebInterface Programm steuern

Ein Thema von DarthDestroyer · begonnen am 8. Jul 2006 · letzter Beitrag vom 11. Jul 2006
Antwort Antwort
DarthDestroyer

Registriert seit: 9. Jun 2005
Ort: Mendig
12 Beiträge
 
#1

Per WebInterface Programm steuern

  Alt 8. Jul 2006, 21:26
Versuche im moment sowas zu coden...

Aber irgendwie hänge ich schon am Anfang!
Was brauch ich dafür... wie mach ich das... da gibt es einiges wo riesiege Fragezeichen dranstehen!
Indy ist sicherlich klar! Aber brauche ich da sonst was?

Wie zB bekomme ich Daten an den Webserver...
- obwohl, das ist klar... Per Timer immer neue HTML Dateien erzeugen...

aber wie weiter?

Wie kann ich ein Formular abfragen? Also wie kommen sachen, die ich im WebInterface eingegeben habe in das Delphi Programm?

oder:

Wie kann ich eine Datei über das WebInterface an den Server schicken?

Fragen über Fragen, hoffentlich hilft mir hier jemand

MfG

DarthDestroyer
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Per WebInterface Programm steuern

  Alt 8. Jul 2006, 22:12
Hi,
ich glaube du solltest dir als erstes überlegen, was du wirklich machen möchtest. Dann wäre die zweite Überlegung womit du dies am besten realisieren möchtest.

Korrigier mich bitte, wenn ich dich komplett falsch verstanden habe, aber du möchtest ein Webinterface benutzen? Für mich heißt das, dass du eine Webseite in einem Browser darstellen möchtest. Soweit richtig?
Dateien über ein Webinterface an den Server schicken geht dann ganz einfach, du schreibst dir ein HTML Formular. Das abschicken der Daten übernimmt dann dein Browser für dich.
Da du von einem Server sprichst, sehe ich noch nicht ganz wo dein Programm reinpasst. Ein normaler Webserver wird deine Anfrage entgegen nehmen und kann die dann bearbeiten. Bei den freien Lösungen würde sich hier jetzt der Apache-Server anbieten. Für den findest du dann gute Module für Perl und PHP, die du eventuell einfacher für dein Programm verwenden kannst. Mit dem Tomcat Server könntest du auch leicht serverseitige Java-Programme schreiben.
Natürlich kannst du per CGI auch Delphi verwenden und nicht zuletzt kann auch ein Delphi Programm als dein Server fungieren, die Frage ist ob du das brauchst.

Warum du aber per Timer HTML Seiten erzeugen möchtest, ist mir noch null klar. Ich mein klar, kannst du machen, aber dein Webinterface sollte ja nunmal in einem Browser angezeigt werden, wie du dort dann einen Timer reinbaust...

Wie gesagt, mir ist noch nicht klar was du machen möchtest und eventuell wäre ein anderer Weg einfacher!

Gruß Der Unwissende
  Mit Zitat antworten Zitat
DarthDestroyer

Registriert seit: 9. Jun 2005
Ort: Mendig
12 Beiträge
 
#3

Re: Per WebInterface Programm steuern

  Alt 9. Jul 2006, 14:10
zB. Timer:

Stell dir mal vor, du hast einen Server zu Hause.
Auf diesem läuft bereits ein normaler WebServer... etc.
Nun möchtest du von einem anderen Rechner aus wissen, wie es ihm "geht".

Also tippst du die IP von dem Server in einen Browser.
192.168.0.1 zB

Dann noch den Port... zB 2025 (sollte ein freier sein).

Also steht nun im Browser: http://192.168.0.1:2025

Nun habe ich meine ersten Schritte mit dem IDHTTPSERVER gemacht und siehe da, alles was ich bisher haben wollte funzt dort wunderbar!

Port 2025 an die Komponente gebunden, allerdings keine Bindings... (noch nicht )


Jetzt aber wieder zu dem Timer.
Wie gehts dem Rechner nun? Man erzeugt einfach per Timer eine Seite, die zB die Systemlast anzeigt... etc.

Man brauch diesen Timer, weil man ja auch wissen möchte, was der Rechner gemacht hat, als man diese Seite nicht gerade besucht hat!
Wenn man den Timer weglassen würde, würde da nur die Systemlast, die der Rechner im moment hat angezeigt...

Hoffe du kannst es jetzt verstehen...
Mein normaler Server soll so bleiben.

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Per WebInterface Programm steuern

  Alt 9. Jul 2006, 14:14
Was für ein Server ist das denn... nennst du ein 2000 oder 2003 Server dein Eigen, so kannst du auch alternativ den Terminaldienst installieren, und dich über Remote Desktop einloggen und hast dann alle Möglichkeiten als würdest Du vorm Server sitzen.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Per WebInterface Programm steuern

  Alt 9. Jul 2006, 14:48
Ok, jetzt denke ich verstehe ich grob was du machen möchtest.
Allerdings denke ich kannst du einen schöneren Weg gehen. Speicher einfach in deinem Timer Event nur die Werte ab, die du ausliefern möchtest. In eine HTML-Seite kannst du die immer noch bei Bedarf wandeln (wenn jmd. diese haben möchte).

Ich weiß jetzt ehrlich gesagt nicht genau, was du wissen möchtest. Alles was du brauchst solltest du leicht finden. Zu den Indys gibt es gute Beispiele und eine OH, die recht vollständig und imho verständlich ist. Wie du eine Verbindung herstellst denke ich weißt du? Im TIdHTTPRequestInfo stehen die Infos zur Anfrage (welche URI, welche Parameter, ...) über das TIdHTTPResponseInfo kannst du dann mittels ServeFile eine Datei ausliefern. Wie man diese Datei erstellt, ist dir sicher klar? Jedenfalls fragst du da nicht nach.
Ok, noch mal die Frage durchgelesen. Ja, schau dir einfach das OnCommandGet-Event an. Das tritt immer bei einer Anfrage auf. Es gibt verschiedene Anfragen. Was du immer bekommst ist ein Request und ein Response Objekt (Protokoll bedingt). Das Request-Objekt kapselt dann immer alle Eigenschaften der Anfrage. Hier ist es eigentlich nur wichtig zu schauen, welche URI angefordert wurde und entsprechend etwas auszuliefern. Unter Params findest du automatisch die geparsten Parameter.
Alles was du dieser Anfrage antworten möchtest, kannst du über das Response Objekt machen. Diese gehört direkt zur Anfrage. Hier findest du alles was du zum ausliefern brauchst. Nimm für den Anfang einfach die ServeFile Methode deines Servers. Hier kannst du dann den Thread und das Response-Objekt der Anfrage nehmen, fertig.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
DarthDestroyer

Registriert seit: 9. Jun 2005
Ort: Mendig
12 Beiträge
 
#6

Re: Per WebInterface Programm steuern

  Alt 10. Jul 2006, 21:22
So, ist zwar noch nicht eingebunden, die Timer Sache, aber soweit funzt es eigentlich alles!
Nur habe ich ein kleines Problem beim Upload, und zwar bekomme ich den Originale Filename nicht angehangen! Aber irgendwoher muss ich doch wissen, was für ein Typ die Datei ist, und vor allem wäre der Dateinamen auch nicht schlecht...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, ShellApi, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdScheduler, IdSchedulerOfThread,
  IdSchedulerOfThreadDefault, IdIntercept, IdServerInterceptLogBase,
  IdServerInterceptLogEvent, IdServerIOHandler, IdServerIOHandlerSocket,
  IdServerIOHandlerStack, IdBaseComponent, IdComponent, IdCustomTCPServer,
  IdTCPServer, IdContext, IdCustomHTTPServer, IdHTTPServer, IdHTTPHeaderInfo,
  Menus;

type
  TForm1 = class(TForm)
    IdHTTPServer1: TIdHTTPServer;
    IdServerIOHandlerStack2: TIdServerIOHandlerStack;
    IdServerInterceptLogEvent2: TIdServerInterceptLogEvent;
    IdSchedulerOfThreadDefault2: TIdSchedulerOfThreadDefault;
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    Server1: TMenuItem;
    Aktivieren1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    procedure IdServerInterceptLogEvent2LogString(
      ASender: TIdServerInterceptLogEvent; AText: String);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure IdServerIOHandlerStack2Status(ASender: TObject;
      const AStatus: TIdStatus; const AStatusText: String);
    procedure FormCreate(Sender: TObject);
    procedure IdHTTPServer1CreatePostStream(AContext: TIdContext;
      var VPostStream: TStream);
    procedure IdHTTPServer1CommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo;
      AResponseInfo: TIdHTTPResponseInfo);
    procedure Aktivieren1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//function fib(n:Integer):Integer; begin if (n <= 2) then result:=1 else result:=fib(n-1) + fib(n-2); end;

function HTMLFormTitel:string;
begin
Result := '<center><font color="#C0C0C0" size="6">Server Remote Panel</font></center>';
end;

function HTMLFormMain(Inhalt:string):string;
begin
Result := '<td align="left" width="85%" valign="top" style="word-spacing: 1; margin: 1" bgcolor="#C0C0C0"></font><font face="Arial" color="#000000">'+Inhalt+'</font><font face="Arial"></td>';
end;

function HTMLFormLinks:string;
begin
Result :=
  '<td width="15%" align="center" valign="top" bgcolor="#800000" style="color: #C0C0C0">'+
   '[url="/"]Home[/url]
'+
  '[url="/upload/"]Upload[/url]
'+
  '[url="/info/"]Info[/url]
'+
  '[url="/ausfuehren/"]Anwendung starten[/url]</td>';
end;

function HTMLFormUnten:string;
begin
Result :=
  '</tr>'+
  '</table>'+
  '</font>'+
  '</body>'+
  '</html>';
end;

function HtmlFormOben(Title:string):string;
begin
Result:=
  '<html>'+
  '<head>'+
  '<meta http-equiv="Content-Language" content="de">'+
  '<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'+
  '<title>'+ Title +'</title>'+
  '</head>'+
  '<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" bgcolor="#000000" link="#C0C0C0" vlink="#C0C0C0" alink="#C0C0C0" text="#000000">'+
  '<font face="Arial">'+
  '<table border="0" width="1000" id="table1" style="border-collapse: collapse" height="332">'+
     '<tr>'+
        '<td height="70" colspan="2" bgcolor="#800000">'+ HTMLFormTitel +'</td>'+
     '</tr>'+
     '<tr>';
end;

function HTMLFormKomplett(FormObenTitel:string;FormInhalt:string):string;
begin
Result :=
  HTMLFormOben(FormObenTitel)+HTMLFormLinks+HTMLFormMain(FormInhalt)+HTMLFormUnten;
end;

function HtmlForm:string;
begin
Result:=
  HTMLFormKomplett('Home',
    '<p align="center">
Home
'
  );
end;

function HtmlInfoForm:string;
begin
Result:=
  HTMLFormKomplett('Info',
    '<p align="center">
Info
'
  );
end;

function HtmlAusfuehrenForm:string;
begin
Result:=
  HTMLFormKomplett('Anwendung starten',
    '<form method="POST" action="/execute/"><p align="center">
Anwendung starten
'+
    '<p align="center"><input type="text" name="filename" size="20"><input type="submit" value="Ausführen" name="execute"><input type="reset" value="Reset" name="reset"></p>'+
    '</form>'
  );
end;

function HtmlUploadForm:string;
begin
Result:=
  HTMLFormKomplett('Upload',
    '<form action="/uploading/" method=post enctype="multipart/form-data">'+
      '<p align="center">
Upload
'+
      '
<input type=file name=file><input type=submit value=Upload></p>
'+
      '</form>'
  );
end;

function HTMLUploadMessage(msg:String):string;
begin
Result:=
  HTMLFormKomplett(msg,
    '<center><h1>File Upload</h1>
'+msg+'
'+
    '[url="/><font"]Click here to continue</font>[/url]</center>'
  );
end;

function HTMLExecuteMessage(msg:String;Error:boolean):string;
begin
  If Error = False then
  begin
    Result:=
      HTMLFormKomplett('Programm Ausführen',
      '<center><h1>Programm Ausführen</h1>
'+msg+' gestartet!
'+
      '[url="/><font"]Click here to continue</font>[/url]</center>'
      );
  end
  else
  begin
    Result:=
      HTMLFormKomplett('Programm Ausführen',
      '<center><h1>Programm Ausführen</h1>
'+msg+' konnte nicht gestartet werden!
'+
      '[url="/><font"]Click here to continue</font>[/url]</center>'
      );
  end;
end;

procedure TForm1.IdServerInterceptLogEvent2LogString(
  ASender: TIdServerInterceptLogEvent; AText: String);
begin
  Memo1.Lines.Add(AText);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IdHTTPServer1.Active := False;
end;

procedure TForm1.IdServerIOHandlerStack2Status(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
  Memo1.Lines.Add(AStatusText);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LongTimeFormat:='hh.mm.ss';
  ShortDateFormat:='dd.MM.yy';
end;

procedure TForm1.IdHTTPServer1CreatePostStream(AContext: TIdContext;
  var VPostStream: TStream);
begin
  VPostStream:=TMemoryStream.Create;
end;

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Var TheFile:TMemoryStream;
    FN:String;
    Error:boolean;
begin

  If ARequestInfo.Document='/Then begin
    With AResponseInfo do begin
      ContentText:=HtmlForm;
      WriteContent;
    end;
  end;
  If ARequestInfo.Document='/ausfuehren/Then begin
    With AResponseInfo do begin
      ContentText:=HtmlAusfuehrenForm;
      WriteContent;
    end;
  end;
  If ARequestInfo.Document='/info/Then begin
    With AResponseInfo do begin
      ContentText:=HtmlInfoForm;
      WriteContent;
    end;
  end;
  If ARequestInfo.Document='/upload/Then begin
    With AResponseInfo do begin
      ContentText:=HtmlUploadForm;
      WriteContent;
    end;
  end;
  If ARequestInfo.Document='/execute/Then begin
    With AResponseInfo do begin
      Error := False;
      if ShellExecute(Application.Handle, 'open', PChar(ARequestInfo.Params.Values['filename']), Nil, Nil, SW_NORMAL) <= 32 then
        Error := True;
      ContentText:= HTMLExecuteMessage(ARequestInfo.Params.Values['filename'],Error);
      WriteContent;
    end;
  end;
  if ARequestInfo.Document='/uploading/then begin
    FN := ARequestInfo.Params.Values['filename'];
    TheFile:=TMemoryStream.Create;
    try
      try
        TheFile.LoadFromStream(ARequestInfo.PostStream);
        TheFile.SaveToFile('.\'+DateToStr(now)+' '+TimeToStr(now)+' '+ARequestInfo.RemoteIP+' '+'.unbekannt'+FN);
        With AResponseInfo do begin
          ContentText:=HtmlUploadMessage('Upload Successful!');
          WriteContent;
        end;
      except
        With AResponseInfo do begin
          ContentText:=HTMLUploadMessage('Upload Error!');
          WriteContent;
        end;
      end;
    finally
      TheFile.Free;
    end;
  end;
end;

procedure TForm1.Aktivieren1Click(Sender: TObject);
begin
  If IdHTTPServer1.Active = False then
    begin
      IdHTTPServer1.Active := True;
      Aktivieren1.Caption := 'Deaktivieren';
    end
    else
    begin
      IdHTTPServer1.Active := False;
      Aktivieren1.Caption := 'Aktivieren';
    end;
end;

end.
Ist zwar ein bisschen viel, aber das sollte gehen
  Mit Zitat antworten Zitat
DarthDestroyer

Registriert seit: 9. Jun 2005
Ort: Mendig
12 Beiträge
 
#7

Re: Per WebInterface Programm steuern

  Alt 11. Jul 2006, 20:24
Mein Problem liegt jetzt hauptsächlich darin, dass FN keine Zuweisung erhält (bzw. einen Leer-String)

Übergibt das Input-Feld überhaupt den Dateinamen? Momentan speichert das Programm sie nämlich ohne FileExtension!

HILFE...

MFG
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:17 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