Wie FTP-Zugang erstellen ?

Spezielle Fragen zu Netzwerk-Protokollen, DNS, Socket ...
gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Sa 9. Feb 2013, 11:43

moin,
ich möchte gerne Files mittels FTP übers Netzwerk aus meinen Sat-Receiver auslesen, d.h., auslesen, editieren und wieder einspielen.
Wie geht das?
Habe etwas dazu gefunden, aber alles in englisch und die Übersetzung ist auch nicht gerade das Wahre.
Mit diversen datei-managern geht es, aber auch unter Gambas?

Und dann noch einen oder mehrere Befehle rüberschicken, damit der Receiver die neuen Daten einliest.

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » So 10. Feb 2013, 16:18

Hi,

die Komponente gb.net.curl hat eine Klasse FTPClient [0]. Dort hast du bereits Get() und Put(). Ueber Exec() solltest du dann das Loeschen implementieren koennen.

[0] http://gambasdoc.org/help/comp/gb.net.curl/ftpclient?v3
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » So 10. Feb 2013, 18:41

hi tux,

wenn wie ich jemand keine Ahunug hat, ist es verdammt schwer. (Englisch und sehr knapp)
Ich kann mich schon da einloggen, das war es dann auch.
Befehle die ich rüberschicke werden nicht beantwortet, ausser ein Verzeichnisswechsel.
Er meldet dann, auch unter Gambas, dass ich drin bin und einen Verzeichniswechsel ausgeführt hat.
Habe den Datenaustausch mit 'wireshark' beobachtet, da sehe ich dann wenigstens etwas.
Kein sonstige Anzeige von irgendwas.

Habe versucht Beispiele aus Gambas umzustricken, aber da scheint was zu fehlen?

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » So 10. Feb 2013, 20:48

Hi,

folgender Code funktioniert und holt die in hFTP.URL angegebene Datei auf meinen Desktop:

Code: Alles auswählen

Dim hFTP As New FtpClient

  hFTP.Async = False ' Je nach Geschmack
  hFTP.User = $sUsername
  hFTP.Password = $sPassword
  hFTP.URL = $sHost &/ $sFile
  hFTP.Get(User.Home &/ "Desktop" &/ $sFile)
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Benutzeravatar
Honsek
Foriker
Beiträge: 515
Registriert: Do 4. Okt 2007, 18:01
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von Honsek » Mo 11. Feb 2013, 09:38

Hallo Gambasso,

unter http://www.gambas-buch.de/dw/doku.php?i ... .3.3:start findest Du ein vollständiges Projekt, welches Du nur noch anpassen musst.

Mit freundlichem Gruß

Honsek
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Mo 11. Feb 2013, 13:45

moin,

@ Honsek:
Das Programm habe ich versucht, eine Verbindung wird zu den vorgegebenen Adressen erstellt, aber ein Download kriege ich davon nicht hin.

Zur Verbindung zu meinen Receiver: Im Programm sehe ich nichts davon. Es erscheint die Meldung: "Allgemeiner FTP-Fehler! (-1009)".
Es wird aber eine Verbindung aufgebaut, aber nicht ins vorgegebene Verzeichnis gewechselt.
Das sehe ich im Programm 'wireshark'.

@ tux: danke für den Code, aber ich weiss so recht nicht, wie ich diesen einsetzen soll.

Bei den Gambas Beispielen ist ein 'CLIENTSOCKET', damit komme ich noch am weitesten, aber noch nicht weit genug.
Da fehlen mir noch Kenntnisse zu der Materie.
Wenn ich mir den Datenaustausch mit den Gambas Beispiel und z.B. dem Dateimanager 'Krusader' ansehe, dann werden da bei einfachen Befehlen mit Krusader wesentlich meher Bytes übertragen, obwohl da nur kleine Befehle übermittelt werden.

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » Mo 11. Feb 2013, 18:14

Hi,

das Problem scheint also eher bei dir oder deinem Receiver zu liegen. Mein abschlieszender Tipp waere: probier mit dem Konsolenprogramm "ftp" herum. Wenn du es dort hinbekommst, ist es in Gambas nicht mehr schwer.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Mo 11. Feb 2013, 18:16

@ Honsek:
Das Programm habe ich versucht, ich sehe jetzt auch ein Verzeichnis, kann auch was auf die Platte dort schreiben,
aber nix von da runterholen.

Zu den anderen Programm 'CLIENTSOCKET' :
damit kann ich mich verbinden, einloggen, und wieder trennen.
Für alles weiter fehlt ihm die Verbindung, Error Code: 425, komisch, ich bin aber verbunden.
Bei STAT erhalte ich:

Code: Alles auswählen

211-FTP server status:
     Connected to 192.168.123.112
     Logged in as root
     TYPE: ASCII
     No session bandwidth limit
     Session timeout in seconds is 300
     Control connection is plain text
     Data connections will be plain text
     At session startup, client count was 1
     vsFTPd 3.0.2 - secure, fast, stable
211 End of status
Da kann ich nur erstmal nichts mit anfangen.
Wer weiss meehr und kann mir helfen?

Gruss
Gruss

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Sa 16. Feb 2013, 12:23

moin,

habe das kleine Beispiel von Dir , tux, versucht und es klappt.

Ich möchte ganz gerne das Verzeichnis anstelle auf der Festplatte in einem TextArea angezeigt haben.

Geht das auch irgendwie, ohne jetzt das File von der Platte zu laden?
-----
Bei dem ganzen möchte ich auch Befehle zum Gerät schicken. Wenn ich das normal über Firefox mach geht es.
Dabei ruft Firefox die IP des Gerätes auf und es erschein eine Oberfläche, mit der man dann einiges unternehmen kann.
Die Befehle werden über HTTP1.1 geschickt, geht das auch hierrüber?
Habe die Befehle über Wireshark ausgelesen und hierüber verschickt, kommt eine Fehlermeldung, kann er nicht.

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » Sa 16. Feb 2013, 20:51

Hi,

ich war diesmal gezwungen, etwas mehr in die FTPClient-Klasse hineinzusehen (habe dabei sogar einen Bug entdeckt, den ich bereits korrigiert habe), deshalb kann ich dir erstmal zwei Tipps zum Debuggen deiner Programme geben: Anstatt wireshark (was ich fuer umstaendlicher halte), kannst du auch

Code: Alles auswählen

FTPClient.Debug = True
setzen und dir so alle FTP-Kommandos anzeigen lassen. Auszerdem kann

Code: Alles auswählen

Public Sub FTP_Error()
  Error "Error: "; Last.ErrorText
End
hilfreich sein. Du gibst damit alle Fehlermeldungen aus - wenn dein FTPClient den Eventnamen "FTP" besitzt.

Was das eigentliche Problem angeht: der FTPClient ist m.E. nicht benutzbar, wenn die Aufgaben ueber Get() und Put() hinausgehen:
Ich möchte ganz gerne das Verzeichnis anstelle auf der Festplatte in einem TextArea angezeigt haben.
Was meinst du damit? Ich nehme an, dass du aehnlich "ls" den Verzeichnisinhalt anzeigen lassen willst. Ich habe mittlerweile ueber zwei Stunden daran herumgedoktert, mir den Inhalt von / ueber das LIST-Kommando anzeigen zu lassen - ohne Erfolg. Das Problem: diese Aufgabe erfordert, dass der Server in den "passive mode" wechselt und dort seine Daten sendet, womit der FTPClient nicht rechnet. Man kommt also nicht an die Daten heran. Das wird z.Z. auf der Mailingliste diskutiert.

Du koenntest das Programm "ftp" fuer deine Zwecke instrumentalisieren. Dort klappt bereits alles. Du erfaehrst hier [0], wie du externe Programme von deinem Gambas-Programm aus fernsteuern kannst.

Solltest du allerdings mit obigem Satz meinen, dass du eine _Datei_ in einer TextArea anzeigen lassen willst, anstatt sie in einer lokalen Datei zwischenzuspeichern, dann: Ja. Es muessen aber zwei Voraussetzungen gegeben sein: 1. FTPClient.Async = True und 2. FTPClient.Get() muss ohne Argument aufgerufen werden. In diesem Fall wird das Read-Event des FTPClients ausgeloest, in dem du die Daten ueber Read lesen musst (Line Input funktioniert seit Revision #5554, das wird in einem zukuenftigen Gambas 3.4.1 offiziell verfuegbar werden):

Code: Alles auswählen

Private $hFTP As FtpClient
' FTP-Daten fuer unten...

Public Sub _new()
  $hFTP = New FtpClient As "FTP"
  $hFTP.User = $sUser
  $hFTP.Password = $sPass
  $hFTP.URL = $sHost &/ $sFile
  $hFTP.Get()
End

Public Sub FTP_Read()
  Dim sFile As String

  Read #Last, sFile, Lof(Last)
  Print sFile
End
Das funktioniert.
Die Befehle werden über HTTP1.1 geschickt, geht das auch hierrüber?
Nein. HTTP ist nicht FTP. Du wirst den HTTPClient aus gb.net.curl oder aehnliches benutzen muessen.

[0] http://www.gambas-buch.de/dw/doku.php?i ... 21.3:start - und Unterkapitel
Zuletzt geändert von tux_ am So 17. Feb 2013, 12:31, insgesamt 1-mal geändert.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » So 17. Feb 2013, 10:19

Hi,

auf der Mailingliste kam heraus, dass man FTPClient.Get("host/verzeichnis") benutzen kann, um sich den Inhalt von "verzeichnis" wie den Inhalt einer Datei herunterzuladen. Vielleicht hast du jetzt alles beisammen, was du brauchst?
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Mo 18. Feb 2013, 16:04

moin,
mit 2 Fenster (Formen) habe ich etwas mehr schon geschaft.
In jedem Fenster muß ein 'Socket' aktiv werden.

Im ersten logge ich mich richtig ein. Dort erhalte ich dann die Port-Adresse (nach PASV oder EPSV) für das zweite Einloggen.
Dort logge ich mich ein mit der Port-Adresse aus dem 1.Fenster.
Gebe ich dann im 1.Fenster den 'LIST' - Befehl, erscheint die Ausgabe im 2.Fenster.
Das ganze kann man auch im Terminal mit 'telnet' nachvollziehen.

Theoretisch müßte man doch auf einer Form 2 x ein Socket benutzen können, um dann in einer Form zu bleiben.
Liege ich da richtig?

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » Mo 18. Feb 2013, 16:36

Hi,

korrekt. Ich habe untern den gambas-usern auch schon vorgeschlagen, den FtpClient, wie er z.Z. ist, durch einen einfacheren auf Basis zweier Sockets zu ersetzen.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

gambasso
Foriker
Beiträge: 1336
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von gambasso » Mo 18. Feb 2013, 18:53

hi tux,

kann man das erhaltene Verzeichnis so beeinflussen, daß man es mit einen Dialog oder FileChooser bearbeiten kann?
So wie es in dem Textfeld erscheint, kann man damit nichts anfangen,
man müßte den Text auseinanderflücken um was damit anzustellen.

Gruss
Gruss

tux_
Moderator
Beiträge: 950
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Wie FTP-Zugang erstellen ?

Beitrag von tux_ » Mo 18. Feb 2013, 19:28

Hi,

du muesstest die Events des FileChooser abfangen und dann in FTP-Kommandos umwandeln, z.B. FileChooser_Active() abfangen (Doppelklick auf eine Datei) und als ein RETR-Kommando zum FTP-Server senden. Das ist sicher moeglich, braucht aber eine genaue Kenntnis des FileChoosers und des FTP-Protokolls.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast