FTP-Verbindung

  • VB6

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von DK1.

    FTP-Verbindung

    Hallo,
    bin dabei, mich in kleinen Schritten an einen FTP-Clienten zu wagen. Allerdings ist der Workshop von vbarchiv ziemlich wirr ,wenn man in dem gebiet einsteiger ist.

    Ich habe zunächst mal versucht eine Verbindung zu meinem eigenen FTP-Server herzustellen. Hier der Code:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Declare Function GetTickCount Lib "kernel32" () As Long
    3. Private ConnectTimeOut As Integer
    4. Private TimeOut As Integer
    5. Private Sub cmdconnect_Click()
    6. ConnectTimeOut = 60
    7. With CmdSock
    8. .Close
    9. .RemoteHost = txtHost.Text
    10. .RemotePort = txtPort.Text
    11. .Connect
    12. End With
    13. TimeOut = (GetTickCount / 1000) + ConnectTimeOut
    14. Do
    15. If TimeOut <= (GetTickCount / 1000) Then
    16. MsgBox "timeout"
    17. Exit Sub
    18. End If
    19. Loop Until CmdSock.State >= sckConnected
    20. End Sub

    Kurz dazu: Die Eingabefelder für Server, User, Passwort und Port sind klar, der Button zum Connecten auch. Dann wär da noch das Winsock Steuerelement namens CmdSock.

    Leider stellt der aber keine Verbindung her, wie ich es auf meinem Server sehe.
    Kann mir evtl. jemand sagen. woran das liegt?

    THX schonmal,
    mfg
    moinkie

    Edit by Agent: VB-Tag eingefügt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Agent“ ()

    Warum baust du dir eine eigene TimeOut-Schleife? Das macht Winsock alles alleine (Error-Event). Evtl stimmt Server oder Port nicht oder du hast eine Firewall aktiv. Ich hab es mal bei mir ohne deine TimeOut-Schleife getestet und Winsock lieferte als State 7 (sckConnected) zurück.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Oh, danke, das wusst ich nicht, hab das nach nem beispiel gemacht. danke nochmal, jetzt funktionierts!
    <hr>
    Ok, ich hab noch ne Frage ?(

    Wie erwarte ich denn die Server-Nachrichten, zB die Welcome-Message. Bei dem Source den ich hab blick ich nicht ganz durch.

    Also zuerst wird doch mit sendcommand ein befehl an den server gesendet. Das ist ja glaub ich nicht das Problem.
    Aber wie bekomme ich die Server-Antwort? Bestimmt mit ner Schleife, aber ich weiss nicht, wie ich die Antworten abrufen kann ;(

    Kann mir evtl. noch jemand helfen?

    Edit by Agent: keine Doppelposts!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Das Winsock-Controll hat dafür den "DataArrival"-Event. Dort kannst du mit winsock1.GetData strServerAntwort die Daten vom Server in eine String-Variable packen...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Ahh, danke :) In dem Source kam der Command gar nicht vor, funzt aber wunderbar, big THX!!!
    Aber warum Doppel-Posting? Kann mich gar nicht daran errinern eins gemacht zu haben.

    EDIT:
    Langsam komm ich mir wie eine Nervrnsäge vor, aber das folgende funktioniert nichtmal im Beipsiel-Programm.
    Um mich am Server anzumelden muss ich doch mittels

    Quellcode

    1. CmdSock.SendData "USER " + User

    den Username senden oder?`und dann bekomme ich ne antwort. Aber diese Nachricht kommt an meinem Server gar nicht an, wie ich sehe.
    Weisst du da auch weiter, Agent? bestimmt :))! Danke schonmal für deine Hilfe!!!!!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Moinkie“ ()

    ...weiß net, ob meine frage hier reinpasst....

    aber: ich beutze das iNet control um verbindung zu meinem FTP aufzubauen. Wie kann ich prüfen, ob eine datei vorhanden ist?? ich habe mich bereits schon mit dem DIR auseinandergesetzt - also inet.execute "Dir "..... aber irgendwie weiß ich net, wie ich dann die information erhalte, ob eine datei vorhanden ist oder nicht...

    könnt ihr mir da helfen?
    sooo....habe es nicht rausgefunden - aber eine andere idee bekommen, die auch geht. ich lade mit OpenUrl den Inhalt in einen string. den werte ich dann aus. Es soll eigentlich nur überprüft werden, ob die datei gefunden wird. die datei, die ich suche enthält nur eine zahl - somit kann ich doch die isNumeric-Anweisung nehmen oder???

    und danach handel ich dann :D (hoffe, dass das nicht wieder stümperhaft ist...)


    noch eine frage: wie kann ich datein eines ordners (vom FTP aus) in einer List auflisten?? Evtl. auch nach dateiendung??

    Edit by Agent: Keine Doppelposts! Edit-Funktion benutzen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Benutz doch einfach die ListView in Report-Ansicht. Da kannst du dann die Spalten Dateiname,Endung,Größe,... einbauen und das sortieren übernimmt dann das Control automatisch...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Zur Festzustellung, ob eine Datei existiert, gibt es keinen FTP-Befehl. Also muss man sich entweder die DIR-Liste vom Server zwischenspeichern und dort nachschauen, oder man benutzt einen anderen Befehl und prüft, ob der Befehl erfolgreich war (z.B. SIZE), wenn nicht gibt es die datei auch nicht.

    Du erhälst vom FTP-Server den Inhalt des entsprechenden Ordnern mithilfe des "DIR"-Befehles, welchen du dann so in die ListView einträgst:

    Visual Basic-Quellcode

    1. ListView1.ColumnHeaders.Add , , "Name"
    2. ListView1.ColumnHeaders.Add , , "Typ"
    3. ListView1.ColumnHeaders.Add , , "Größe"
    4. ListView1.ListItems.Add , , "File1"
    5. ListView1.ListItems(ListView1.ListItems.Count).SubItems(1) = "exe"
    6. ListView1.ListItems(ListView1.ListItems.Count).SubItems(2) = "100"
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    also ich habe den code so eingebaut, bekomme aber nur die spalten mit der einen zeile, was ja auch ganz logisch ist so....

    sorry aber ich habe keinen blassen schimmer, wie genau das gehen soll ^^

    zudem habe ich letztens nichtmal den "Dir " Befehl zum laufen bekommen. geht das noch ausführlicher bitte??? im ordner befinden sich datein des types "ece" und "php" - ich will aber nur die "ece" haben...

    wäre nett, danke
    Also ich verstehe jetzt dein Problem nicht. Hast du eine Verbindung zum FTP-Server hergestellt und dich eingeloggt? (Siehe oben bei Moinkie) Oder kommst du einfach mit FTP an sich nicht klar, dann hat das aber nichts im VB-Forum zu suchen...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Also du sendest "DIR [Pfad]" an den Server. Darauf könnte der Server folgendes Antworten:

    Quellcode

    1. 200 PORT command successful
    2. 150 Opening ASCII mode data connection for /bin/ls.
    3. total 6
    4. drwxr-xr-x 2 ftp wheel 1024 Feb 17 1994 bin
    5. drwxr-xr-x 2 ftp wheel 1024 Feb 17 1994 etc
    6. drwxrwxrwx 2 ftp wheel 1024 Dec 3 1993 incoming
    7. drwxr-xr-x 2 ftp wheel 1024 Nov 17 1993 lib
    8. drwxr-xr-x 2 ftp wheel 1024 Feb 17 1994 pub
    9. drwxr-xr-x 3 ftp wheel 1024 Feb 17 1994 usr
    10. 226 Transfer complete.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    und die antwort des servers werte ich dann aus?? und überprüfe dann, ob er die datei zur list hinzufügen soll???

    aber wie realisiere ich es, wenn ich keine anzahl der dateien kenne, sondern nur den ordner angebe. sicherlich über eine schleife?
    "total 6" sagt dir, dass jetzt 6 Dateien kommen. Du kannst ja die Spit-Funktion verwenden und das daraus resultierende Array mit einer Schleife in die ListView schreiben.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau