Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Suche FTP-Komponenten (https://www.delphipraxis.net/172912-suche-ftp-komponenten.html)

philharmony 28. Jan 2013 16:21

Suche FTP-Komponenten
 
Hallo
Ein Freund hat mir ein paar Beispiele für eine FTP Server und Client Anwendung. Allerdings für Delphi. Er benutzt dazu die ICS-Komponenten von Overbyte. Da ich aber mit Lazarus arbeite bräuchte ich vergleichbare Komponenten.
Mein Projekt soll folgendes machen: Ein Client meldet sich beim Server an, welcher dann je nach Userdaten aus einer Datenbank eine Customized-Datei erstellt und dem Client zuschickt. Dieser kann ggf. auch eine Datei erzeugen und dem Server schicken, der den Inhalt dann in die Datenbank einpflegt.
Grüße
Phil

evilboy 28. Jan 2013 17:31

AW: Suche FTP-Komponenten
 
Indy gibt es auch für Lazarus…
http://wiki.freepascal.org/Indy_with_Lazarus

sx2008 28. Jan 2013 18:47

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von philharmony (Beitrag 1201011)
Mein Projekt soll folgendes machen: Ein Client meldet sich beim Server an, welcher dann je nach Userdaten aus einer Datenbank eine Customized-Datei erstellt und dem Client zuschickt. Dieser kann ggf. auch eine Datei erzeugen und dem Server schicken, der den Inhalt dann in die Datenbank einpflegt.

Diese Beschreibung deutet daraufhin, dass du eigentlich einen Webserver mit dem Protokoll HTTP oder HTTPS verwenden solltest.
Der Client stellt eine Anfrage zu einer Resource (Methode GET) und der Server anwortet.
Oder der Client sendet selbst Daten (Methode POST oder PUT) und der Server speichert diese (meist in einer Datenbank).
Das ist genau das Anwendungsszenario für einen Webserver.

FTP ist eher ungeeignet weil auf der Serverseite kein Mechanismus existiert mit dem der Server feststellen können dass es eine neue Datei gibt und dass diese Datei auch komplett hochgeladen wurde.
Ausserdem hat man mit FTP nur Ärger (FTP ist in vielen Firmen blockiert, FTP arbeitet nur schlecht oder gar nicht über Proxyserver, Probleme mit Unicode-Dateinamen,...).

philharmony 29. Jan 2013 07:03

AW: Suche FTP-Komponenten
 
Auf Indy bin ich auch schon gestoßen, allerdings werde ich aus der Installationsanleitung nicht schlau:

Zitat:

Open and compile indysystemlaz.lpk
Open and compile indycorelaz.lpk
Open and compile indyprotocolslaz.lpk
Open, compile and install dclindycorelaz.lpk
Open, compile and install dclindyprotocolslaz.lpk
In den beiden Archiven für Indy 9 und 10 ist aber jeweils nur die indySystemLaz.lpk enthalten.
Zitat:

Diese Beschreibung deutet daraufhin, dass du eigentlich einen Webserver mit dem Protokoll HTTP oder HTTPS verwenden solltest.
Ich dachte, FTP wäre dazu gedacht, Dateien zu übertragen, was ich ja genau machen will...

Bernhard Geyer 29. Jan 2013 07:28

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von philharmony (Beitrag 1201089)
Ich dachte, FTP wäre dazu gedacht, Dateien zu übertragen, was ich ja genau machen will...

Wenn es feste/vordefinierte schon erzeugte Dateien sind - Ja.
Du willst abhängig von User ja Dateien erzeugen lassen. Hier nimmt man i.d.R. http(s)

mjustin 29. Jan 2013 07:30

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von philharmony (Beitrag 1201089)
Auf Indy bin ich auch schon gestoßen, allerdings werde ich aus der Installationsanleitung nicht schlau:

...

Ich dachte, FTP wäre dazu gedacht, Dateien zu übertragen, was ich ja genau machen will...

Indy funktioniert auch gut ohne Installation - dazu müssen nur die Lib/Core, Lib/Protocols und Lib/System Verzeichnisse in das Projekt aufgenommen werden. Die Komponenten können zur Laufzeit erzeugt werden.

:wink: FTP ist auch besonders gut zur Übertragung von Benutzernamen und Passwort im Klartext geeignet

philharmony 29. Jan 2013 09:55

AW: Suche FTP-Komponenten
 
Zitat:

Wenn es feste/vordefinierte schon erzeugte Dateien sind - Ja.
Du willst abhängig von User ja Dateien erzeugen lassen. Hier nimmt man i.d.R. http(s)
Bin mir nicht ganz sicher, ob ichs richtig verstehe. Die Dateierzeugung würde ich Softwaretechnisch machen, dazu habe ich shcon komponenten. Grob gesagt gibt es eine Liste mit allen Usern, die mitmachen dürfen, und welchen Teil der Datenquelle sie sehen dürfen. Daraus wird dann eine Date gebaut (funktioniert bereits), die der Client lesen und verarbeiten kann (Geht ebenfalls bereits).
Ich möchte meiner Anwendung die momentan beides macht einfach nur in zwei Anwendungen aufteilen und die Informationen, welcher User anfragt, und die Datei die zurückgeschickt wird nicht mehr von Form1 auf Form2 übertragen, sondern über eine FTP/HTTP/Bechertelefon-Komponente "Tunneln", damit die Aufgaben schöner getrennt sind.
Ich rede nicht davon, einen eigenen (Hardware)-Server im Rechenzentrum zu verwenden, die Server-Anwendung läuft einfach dauerhaft auf einem Rechner im Netzwerk und wartet, ob eine Clientsoftware von einem anderen Rechner eine Datei haben möchte.
P.S., habe Indy 10.2 Installiert bekommen, Lazarus und Komponenten dafür sind wirklich sowas von grottig dokumentiert...

mjustin 29. Jan 2013 10:08

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von philharmony (Beitrag 1201130)
P.S., habe Indy 10.2 Installiert bekommen, Lazarus und Komponenten dafür sind wirklich sowas von grottig dokumentiert...

Das ist eine sehr alte Version. Die aktuelle Version 10.5.9 kann man per Subversion downloaden:

http://www.indyproject.org/sockets/download/svn.en.aspx

philharmony 29. Jan 2013 11:05

AW: Suche FTP-Komponenten
 
Zitat:

Das ist eine sehr alte Version. Die aktuelle Version 10.5.9 kann man per Subversion downloaden:
Ich bin froh, daß ich die 10.2 Installiert bekommen habe.

philharmony 30. Jan 2013 20:40

AW: Suche FTP-Komponenten
 
Vielleicht nochmal iene etwas allgemeinere Frage: Die ganze Netzwerkerei ist Programmtechnisch neuland für mich. Mir ist das Schichtmodell klar und die Indykomponenten führe ich mir grade mittels Tutorials zu Gemüte.
Die Dateien die ich schicken möchte sind relativ kurze Textdateien, mit wenns mal viel wird vllt. 200 Zeilen.
Es wird genau EINE Art Datei an den Client geschickt und der schickt genau EINE Art datei zurück. Dh das ganze ist sehr übersichtlich. Macht es da Eurer Meinung nach eher Sinn, sich selbst ein kleines Protokoll auszudenken, braucht ja nicht viel mehr als "ich bin derunderUser, schick mir meine Datei", "Danke, Erhalten" oder "Fehler".
Die Strings kann man ja auch noch verschlüsseln für die Sicherheit.
Oder lieber was vorhandenes Benutzen? Wenn ja, was würde sich da anbieten? Es soll nicht zu viel Overhang haben, soll ja eigentlich nur sehr wenig können.
Freu mich auf Ideen!

sx2008 31. Jan 2013 16:27

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von philharmony (Beitrag 1201413)
Macht es da Eurer Meinung nach eher Sinn, sich selbst ein kleines Protokoll auszudenken

Ich würde da ganz auf HTTP setzen.
Das reicht für deine Zwecke vollkommen aus.
Die Anfrage könnte z.B. so aussehen:
Code:
GET /data.cgi?user=philharmony&typ=Artikel HTTP/1.1
Host: 192.168.1.45
In der Anfrage sind 2 Parameter (user und typ) enthalten.

Der Server antwortet dann etwa so:
Code:
HTTP/1.0 200 OK
Date: Fri, 31 Jan 2013 15:12:48 GMT
Last-Modified: Fri, 31 Jan 2013 15:12:48 GMT
Content-Language: de
Content-Type: text/html; charset=utf-8
Content-Length: 793

Hier stehen die Nutzdaten deiner Datei bzw. Resource.
Insgesamt stehen hier 793 Byte....
...
An deiner Stelle würde ich einen "richtigen" Webserver wie z.B. Apache, nginx oder lighttpd verwenden.
Die Datenaufbereitung übernimmt dann ein Delphi-Konsolenprogramm.
Der Webserver ruft dann das Konsolenprogramm per CGI auf, bekommt die Daten aus dem Std-Output und sendet sie an den richtigen Client zurück.
http://www.drbob42.com/books/cgi.htm
Du wirst einige Zeit brauchen um dich einzufuchsen, aber es lohnt sich.
Man könnte den Delphi-Client sogar durch Webbrowser ersetzen oder ergänzend zulassen.
Auf jeden Fall stehen so alle Wege offen.

mjustin 31. Jan 2013 16:43

AW: Suche FTP-Komponenten
 
Zitat:

Zitat von sx2008 (Beitrag 1201543)
An deiner Stelle würde ich einen "richtigen" Webserver wie z.B. Apache, nginx oder lighttpd verwenden.

Für Anwendungen die im Internet erreichbar ist, auf jeden Fall empfehlenswert, schon aus Sicherheitsgründen und um einfach HTTPS und andere Erweiterungen einsetzen zu können.

Anstatt des hochbetagten CGI (Stichwort: Resourcenverbrauch, hohe Antwortzeit wenn Initialisierungen erforderlich sind) würde ich hinter dem Apache dann aber eine Delphi HTTP Server Anwendung laufen lassen. Der Apache leitet die Requests dann durch, und die ständig laufende Delphi Anwendung beantwortet die Anfragen.

philharmony 5. Feb 2013 11:34

AW: Suche FTP-Komponenten
 
Es wird extrem selten auf den Server zugegriffen, schätzungsweise 1 mal am Tag, dabei wird dann genau eine kleine Datei an den CLient geschickt, der u.U. später eine noch kleinere Date zurückschickt. Klein heißt in diesem Fall in der Größenordnung von max ein paar -zig bis hundert Zeilen Text.
Es soll nicht aus dem Internet zugegriffen werden und auch nicht per Browser oder sonst was. Es gibt einfach auf jedem PC eine Anwendung die diese Daten braucht und sie sich vom Server holt. Zur besseren Übersichtlichkeit soll dabei jeder User nur bestimmte Daten bekommen. Eine Datenbank würde auch gehen, ich habe aber bereits eine Anwendung die das ganze Datenhandling macht, daher möchte ich nicht alles neu machen. Im Prinzip würde ich soweit wie möglich einfach nur die Sinngemäß function LoadFile(User : TUser) : TMyFile durch die function GetFileFromServer(User : TUser) : TMyFile ersetzen, und die LoadFile-Funktion im Server unterbringen.
Ich bin jetzt mehrfach auf die Indy-Komponenten gestoßen. Diese unterstützen OpenSSL. Ich würde das ganze doch per FTP machen, genauer mit FTPs. Dh die Datei soll einfach auf Anfrage verschlüsselt vom mini-Server an den Mini-Client geschickt werden und fertig.
Es gibt sicherlich auch tausend andere möglichkeiten aber irgendwann muss ich mich mal für eine entscheiden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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