FTP-Verbindung mit TCP realisieren

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    FTP-Verbindung mit TCP realisieren

    Tach,

    ich suche eine Möglichkeit, eine FTP-Verbindung normal mit TCP aufzubauen. Wie genau das geht weiß ich
    nicht, vermutlich verbindet man sich und sendet die Daten. Ich habe aber leider nicht die geringste Ahnung von sowas.
    Wie müsste man da vorgehen?

    Falls jemand nach dem Grund fragt, ich möchte das ganze später auf TFTP, SFTP und FTPS ausweiten ;)

    Grüße

    *Topic verschoben*
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ja, einfach per TCP Client verbinden und dann die FTP-konformen Daten senden. Allerdings ist der Umfang eines solches Projekts sehr groß (spreche aus eigener Erfahrung). Also würde ich prinzipiell davon abraten, denn es ist recht unwahrscheinlich, eine wirklich gute, schnelle, stabile und Standard-konforme Umsetzung zu erzielen...
    Einfach verbinden. Toll. Genau das ist vermutlich mein Problem :P
    TCPListener? TCPWhatever? Ich hab keine Ahnung was ich hier verwenden soll, weil ich abgesehen von
    Chats noch nie mit TCP gearbeitet habe. Das scheint zwar ein reines "Ich bin zu faul um mich selbst zu informieren"-Problem
    zu sein, aber ich finde einfach keine Beispiele, die mit FTP arbeiten. Und alles andere TCP-Zeugs kann ich nicht
    auf FTP anpassen. -.-

    Und zu ner guten Umsetzung... Wo genau liegen die Probleme, wenn du aus eigener Erfahrung sprichst?

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    TcpClient. Und zu den Problemen: Die Unterstützung der ganzen Funktionen des Protokolls etc. SSL Verschlüsslung, verschiedenen Verbindungsmodi und all sowas. Von daher: ich würde dir empfehlen lieber die eingebauten FTP-Funktionen des Frameworks zu nutzen...
    Wenn die eingebauten Funktionen ja nur TFTP, SFTP und FTPS unterstützden würden...
    Oder gibts da Möglichkeiten? Danach hatte ich irgendwann schonmal gefragt.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Normale TCP Verbindung aufbauen. Heißt TCPClient und auf Server verbinden. Implementation des FTP Protokolls der Spezifikation entsprechend durchführen.
    ietf.org/rfc/rfc959.txt


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ich hab mich mal daran versucht. Mit dem Nutzernamen klappt das auch, aber beim senden des Passworts
    bekomme ich "421 Login Timeout: closing control connection". Beim Nutzernamen erhalte ich als
    Response "220 FTP-Server ready".

    Wieso bekomme ich einen Timeout? Ich verwende PASS Passwort und schreibe das ganze in
    den Stream des TCPClienten.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich hab das ganze nun hinbekommen, nun sitze ich wohl am vorerst letzten Problem.
    Ich sende

    USER Nutzername und erhalte FTP-Server ready

    Dann sende ich

    PASS Passwort und erhalte Password required for User Nutzername

    Alles ist also um 1 verzögert. Um das zu testen holte ich den ResponseString danach einfach nochmal.
    Dieser war, wie zu erwarten, nun User Nutzername logged in., obwohl ich ja in der Zwischenzeit garnichts mehr gesendet hatte.
    Woran liegt diese Verzögerung?

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Wenn ich den gesamten Code sehen könnte, könnte ich dazu mehr sagen.

    Aber vermutlich liegt es daran, dass du nach dem Verbinden nichts abholst?

    So sollte die Reihenfolge aussehen:

    1. Verbinden
    2. Antwort abrufen
    3. USER XXX
    4. Antwort abrufen
    5. PASS YYYY
    6. Antwort abrufen


    Gruß, Real-TTX
    Hey, erstmal danke für die Antwort um diese Zeit :)
    Das Problem daran ist, dass ich zum abholen der Daten Angaben meiner gesendeten Daten nutze.

    VB.NET-Quellcode

    1. data = System.Text.Encoding.ASCII.GetBytes("PASS Passwort")
    2. stream.Write(data, 0, data.Length)
    3. Console.WriteLine("Sent: PASS Passwort")
    4. data = New Byte(256) {}
    5. responseData = String.Empty
    6. bytes = stream.Read(data, 0, data.Length)
    7. responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
    8. Console.WriteLine("Received: " & responseData)


    Der Stream ist hierbei ein Networkstream der an den Stream des TCP-Clienten gebunden ist.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    lese direkt nach dem Verbindungsaufbau erstmal Daten vom Server, denn der sendet dir bereits zu beginn eine Willkommensnachricht. D.h. bevor du denn Nutzernamen sendest Daten empfangen, dann sollte das ganze nachher auch in der richtigen Reihenfolge kommen.

    VB.NET-Quellcode

    1. data = New Byte(256) {}
    2. responseData = String.Empty
    3. bytes = stream.Read(data, 0, data.Length)
    4. responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)

    geht doch einwandfrei bevor du Daten gesendet hast...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Wie soll ich denn Daten vom Server lesen? Dazu scheine ich ja zu unfähig zu sein...
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich hatte es eben schonmal so versucht, hab aber nur Timeouts bekommen. Hab mal ein bisschen mit jvbsl's Beispiel rumgespielt, es klappt.
    Danke und schönen Morgen euch :)
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich hab meine FTPLibrary anhand dieses Codes erstellt bzw um eineige Befehle erweitert
    forum.chip.de/visual-basic-vis…ndung-dirlist-667926.html

    Hier wird immer ein Command abgesetzt und die Antwort demensprechend ausgewertet.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten