LNet Tutorial

Alle Fragen zur Netzwerkkommunikation
lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

LNet Tutorial

Beitrag von lucster »

Hi,

bin ganz neu hier im Forum und hab mich mal umgeschaut, wie es unter Lazarus funktionieren könnte, eine Verbindung per FTP zu einem Rechner im Netzwerk herzustellen. Bin dabei auf Synapse und LNet gestoßten.

Ich erläutere mal mein Vorhaben und vll., da icj ja noch am Anfang stehe, könnt ihr mir dann sagen, welches der beiden Komponenten ich eher nutzen sollte.

Problem:
Nutzer hat Filteroptionen zur auswahl (Datum, Zeitraum, ID, ...). Davon können auch mehrere gleichzeitig ausgewählt werden. Anhand dieser Filteroptionen soll ein Standartverzeichnis auf einem PC im Netzwerk durchsucht werden. Dieser PC wird durch IP genau identifiziert. (Am Ende soll es auch möglich sein nacheinander sich mit einer ganzen Auflistung von PCs im Netzwerk verbinen zu könnnen, und die jeweiligen Standartverzeichnisse mit den Filteroptionen zu durchsuchen).
Die Treffer der Suche (also die jeweiligen Dateien) sollen nach der Suche kopiert werden (lokal auf dem Rechner, wo die Anwendung läuft, gespeichert werden).

So darum geht es also. An sich brauche ich Befehle für folgende Aufgaben:
- Connect (IP und PW- Eingabe)
- Disconnect
- Datenübertragung (herunterladen)

Gibt es ein gutes Tutorial (vorzugsweise auf Deutsch) zu LNet? (FTP)
Die Anwendung läuft unter WindowsXP.

Grüße Lucster

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: LNet Tutorial

Beitrag von af0815 »

lucster hat geschrieben:Gibt es ein gutes Tutorial (vorzugsweise auf Deutsch) zu LNet? (FTP)


Habe bis jetzt nicht mal ein schlechtes auf Deutsch gefunden. Ab besten ist es dzt. sich an den Beispielen zu orientieren, die dabei sind (in den Ordern suchen).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Hier scheint ja nich agnz so viel im Forum los zu sein oder? :S

Auf jeden Fall habe ich mich jetzt mit synapse auseinander gesetzt.
Ich komme jetzt an alle Infos ran, die ich brauche, dank der Referenz, wo alle Klassen und Units mit functions, constructors und properties genauestens beschrieben sind.

Nur klappt das connecten zu nem rechner per ftp nicht.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Create TFTPClient
  TFTPClient := TTFTPSend.Create;
  Log.Lines.Add('TFTPClient created');
 
  // Set IP/Port/Username/Password
  TFTPClient.TargetHost := IPEdit.Text;
  Log.Lines.Add('TargetSystem is ' + TFTPClient.TargetHost);
  TFTPClient.TargetPort := PortEdit.Text;
  Log.Lines.Add('TargetPort is ' + TFTPClient.TargetPort);
  TFTPClient.UserName:= UserEdit.Text;
  Log.Lines.Add('UserName is ' + TFTPClient.UserName);
  TFTPClient.Password:= PassEdit.Text;
  Log.Lines.Add('Password is ' + TFTPClient.Password);
 
  // Try to get file
  Log.Lines.Add('Try to get "' + FilePathServerEdit.Text + '"');
  if TFTPClient.RecvFile(FilePathServerEdit.Text)
    then
      begin
        // Filetransfer successful
        Log.Lines.Add('File successfully get from TFTPServer');
        SaveDialog1.FileName := FilePathServerEdit.Text;
        if SaveDialog1.Execute
          then TFTPClient.Data.SaveToFile(SaveDialog1.FileName);
      end
    else
      begin
        // Filetransfer not successful
        Log.Lines.Add('Error while getting File from TFTPServer');
        Log.Lines.Add(IntToStr(TFTPClient.ErrorCode) + ' - ' + TFTPClient.ErrorString);
      end;
 
  // Free TFTPClient
  TFTPClient.Free;
  Log.Lines.Add('TFTPClient destroyed');
end;


Sieht da jmd irgendein Problem?

grüße

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Erstens brauchst du die unit ftpsend nicht tftptsend, Demzufolge auch die Klasse TFTPSend und nicht TTFTPSend (Trivial FTP).
Dann wäre vielleicht ein Login nicht schlecht.

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

mit der login function ist mir auch aufgefallen. gibts ja nur nich in der tftptsend.

hab alles auf ftpsend umgeschrieben.
sieht folgendermaßen aus:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Create TFTPClient
  FTPClient := TFTPSend.Create;
  Log.Lines.Add('TFTPClient created');
 
  // Set IP/Port/Username/Password
  FTPClient.FWHost:= IPEdit.Text;
  Log.Lines.Add('TargetSystem is ' + FTPClient.FWHost);
  FTPClient.FWPort:= PortEdit.Text;
  Log.Lines.Add('TargetPort is ' + FTPClient.FWPort);
  FTPClient.FWUsername:= UserEdit.Text;
  Log.Lines.Add('UserName is ' + FTPClient.FWUsername);
  FTPClient.FWPassword:= PassEdit.Text;
  Log.Lines.Add('Password is ' + FTPClient.FWPassword);
  //FTPClient.FWMode:=1;
 
  // Connect
  if FTPClient.Login then Log.Lines.Add('Logged in!');
 
  // for testing
  if FtpGetFile(IPEdit.Text, PortEdit.Text, '/d:/text.txt', 'd:\test.txt', UserEdit.Text, PassEdit.Text)
  then Log.Lines.Add('GET FILE');
 
  // for testing
  if DeleteFile('/d:/text.txt') then Log.Lines.Add('Deleted!!');
 
  // Logout
  if FTPClient.Logout then Log.Lines.Add('Logged out!');
 
  // Free TFTPClient
  FTPClient.Free;
  Log.Lines.Add('TFTPClient destroyed');
end;


Nur funktioniert das richtige Login immernoch nicht, genauso wie die Delete function.
Die GetFile function funktioniert. Aber ich will mich ja einloggen und dann ein paar przeduren durchlaufen lassen und mich wieder verarbschieden. Das muss doch möglich sein. :) Oder kann man zb. als erstes den GetFile schreiben, dann bleibt man eingeloggt? könnte dann prozeduren nachschieben. dann schlielich wieder ausloggen? mmh, eher unwarscheinlich :)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Ich würde vorschlagen, das du eine Session mit dem ftp-Kommando auf der Shell (Kommandozeile) von Windows machst.

Und genau dasselbe dann mit den Pascalkomponenten. Auf der Shell hast du den Vorteil der unmittelbaren Rückmeldung und siehst sofort was los ist. IMHO ist dann das Verständnis für FTP etwas höher.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Du bringst hier die "praktischen" standalone Funktionen wie FtpGetFile, die alles in einem Aufwasch machen (auch login) und die Methoden der Klasse TFTPSend durcheinander.
Die Entsprechende Funktion von TFTPSend heisst RetrieveFile wie du hier sehen kannst:
http://synapse.ararat.cz/doc/help/ftpsend.TFTPSend.html

Dein DeleteFile ist auch quatsch, das ist das lokale. Du musst FTPClient.Deletefile(..) aufrufen.
Hirn einschalten! ;-)

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Also. das mit dem DeleteFile ist nebensächlich, weil ich damit nur etwas ausprobieren wollte. Mir geht es um den Login und den Logout. Das FTPGetFile alles in einem Schritt macht ist mir doch auch klar. Die Frage war nur ob man vll. nach dem Befehl noch eingeloggt ist oder automatisch der Logout mit ausgeführt wird.

Naja ich habe bis jetzt keine fachmännische Meinung erhalten, ob es sinnvoller ist mit der synapse kompo zu arbeiten oder alles per CreateProcess und ner batch-Datei zu handeln.

vll nochmal mein vorhaben:
- einloggen
- ein standart-verzeichnis udn deren unterverzeichnisse durchsuchen
- treffer(mehrere) merken
- diese dann herunterladen auf den lokalen rechner
- ausloggen

Mir bleibt da die Frage, ob man an eine BatchDatei auch Funktionen als parameter übergeben kann? bzw. ob das von meinem Anspruch her die Parametrisierung des CreateProcess hergibt?

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

jetzt hab ich den Fehler.
die Properties beim IP/PORT/UN/PW Set sind falsch.

So muss es aussehen:

FTPClient.TargetHost:= IPEdit.Text;
Log.Lines.Add('TargetSystem is ' + FTPClient.TargetHost);
FTPClient.TargetPort:= PortEdit.Text;
Log.Lines.Add('TargetPort is ' + FTPClient.TargetPort);
FTPClient.UserName:= UserEdit.Text;
Log.Lines.Add('UserName is ' + FTPClient.UserName);
FTPClient.Password:= PassEdit.Text;
Log.Lines.Add('Password is ' + FTPClient.Password);

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das steht aber alles in der Unit beschrieben. Sorry, aber wer lesen kann ist klar im Vorteil.

Wenn es ein separates Logout Kommandio gibt wie kommt man dann auf die Idee das nach einem Befehl ausgeloggt wird ?!

Und in der DelphiPraxis hat man dir wie es dort leider Standart ist schon funktionierenden Code vor die Füsse geworfen.

Und irgendwas mit Batch Dateien zu machen ist sicher niemals sinvoller als es auf direktem Wege zu erledigen. Createprozess ist eine reine Windows Lösung um Programme auszuführen. Davon würde ich abraten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

Es war gestern nen langer Arbeitstag. Deswegen hab ich vll. irgendwas in der Beschreibung übersehen. Aber so toll ist es nun auch wieder nicht beschrieben.

die FW-Eigenschaften (property FWHost: string read FFWHost Write FFWHost;
property FWPort: string read FFWPort Write FFWPort;
property FWUsername: string read FFWUsername Write FFWUsername;
property FWPassword: string read FFWPassword Write FFWPassword;
property FWMode: integer read FFWMode Write FFWMode;
) werden beispielsweise garnicht erläutert. die sind mir ins auge gefallen und deswegen bin davon ausgegangen das die login funktion diese parameter nutzt und nich wie im letzten post beschrieben (TargetHost, TargetPort, UserName...).

Ich habe quasie in der klasse geschaut, nicht in der unit :(

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

1. Die propertys und methoden sind doch direkt in der Klasse beschrieben ?! Wie hast du in die Klasse geguckt ohne das zu lesen ?
2. Bei Synapse sind Beispiele dabei dies erläutern.
3. Hattest du auch noch den Code aus der Delphi Praxis.
4. Natürl sind die FWHost eigenschaften beschrieben.

Code: Alles auswählen

{:Address of firewall. If empty string (default), firewall not used.}
    property FWHost: string read FFWHost Write FFWHost;
 
    {:port of firewall. standard value is same port as ftp server used. (21)}
    property FWPort: string read FFWPort Write FFWPort;
 
    {:Username for login to firewall. (if needed)}
    property FWUsername: string read FFWUsername Write FFWUsername;
 
    {:password for login to firewall. (if needed)}
    property FWPassword: string read FFWPassword Write FFWPassword;
 
    {:Type of Firewall. Used only if you set some firewall address. Supported
     predefined firewall login sequences are described by comments in source
     file where you can see pseudocode decribing each sequence.}

    property FWMode: integer read FFWMode Write FFWMode;
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Beitrag von lucster »

1. habe ich schon beantwortet
2. da gibts nur ein Bsp. zu TFTPTSend, mit dem ich mich auch auseinandergestezt habe. Habe dann festgestellt das ich FTPSend brauche
3. Welchen Code hatte ich denn bitte aus der DelphiPraxis?...
4. ...Nur habe ich nichts anderes gefunden als diese Eiegnschaften!

Was willst du jetzt eigentlich von mir? dachte die Aufgabe eines Forums ist Informationsaustausch. Muss ich mich jetzt für mein Unwissen rechtfertigen?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

1.) wo hast du das beantwortet ? "In Klasse gucken" was soll ich darunter verstehen ?

3.) http://www.delphipraxis.net/topic140300_lazarus+synapse+connect+funzt+nicht.html#11

Beitrag #11

Was willst du jetzt eigentlich von mir? dachte die Aufgabe eines Forums ist Informationsaustausch. Muss ich mich jetzt für mein Unwissen rechtfertigen?
Nö, nur für faulheit.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Christian hat geschrieben:Und irgendwas mit Batch Dateien zu machen ist sicher niemals sinvoller als es auf direktem Wege zu erledigen. Createprozess ist eine reine Windows Lösung um Programme auszuführen. Davon würde ich abraten.

Es ging darum das ganze mal zu Fuß auf der Konsole zu machen, damit ein Verständnis für den FTP überhaupt da ist. Denn daran und am hineinsehen in die Sources scheitert es meistens.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten