Aktiver FTP-Client für Node.js

8

Ich versuche, einen FTP-Client gegen Filezilla zu schreiben, der den aktiven Modus mit node.js unterstützt. Ich bin neu bei ftp und node.js. Ich dachte, ich könnte die TCP-Socket-Kommunikation und das FTP-Protokoll durch diese Übung gut verstehen. Außerdem node-ftp und jsftp scheint den aktiven Modus nicht zu unterstützen, daher denke ich, dass dies eine nette (wenn auch selten genutzte) Ergänzung zu npm sein wird.

Ich habe einen Code-Beweis, der zumindest manchmal, aber nicht immer funktioniert. Wenn es funktioniert, lädt der Client eine Datei namens file.txt mit dem Text 'hi' hoch. Wenn es funktioniert, bekomme ich das:

%Vor%

Wenn es nicht funktioniert, bekomme ich das:

%Vor%

Also, ich bekomme die 226 nicht, und ich bin mir nicht sicher, warum ich die inkonsistenten Ergebnisse bekomme.

Verzeihen Sie den schlecht geschriebenen Code. Ich werde umgestalten, sobald ich überzeugt bin, dass ich verstehe, wie das funktionieren soll.:

%Vor%

Ist auch server geeignet, oder sollte ich das anders machen?

BEARBEITEN: Ich habe den Rückruf in server.listen geändert, um einen zufälligen Port zu verwenden. Dies hat die 425 entfernt, die ich zuvor bekommen habe. Ich bekomme jedoch immer noch kein konsistentes Verhalten bei der Dateiübertragung.

    
Josh C. 04.09.2013, 00:42
quelle

1 Antwort

1

Der Ablauf für FTP-Übertragungen im aktiven Modus funktioniert ungefähr wie folgt:

  • Verbindungspräambel ( USER / PASS )
  • Richten Sie einen lokalen Client-Socket für Daten ein
  • Informiere den Server dieses Sockets ( PORT )
  • Sagen Sie dem Server, dass er die Remote-Datei zum Schreiben öffnen soll ( STOR )
  • Beginnen Sie mit dem Schreiben der Daten aus dem oben angegebenen Datensocket ( socket.write() )
  • Schließen Sie den Stream von der Clientseite ( socket.end() ), um die Dateiübertragung zu beenden
  • Sagen Sie dem Server, dass Sie fertig sind ( QUIT )
  • Bereinige alle geöffneten Sockets und Server auf dem Client

Also, sobald du das getan hast:

%Vor%

Der Server antwortet mit einem 150 , dass er sich mit dem von Ihnen eingerichteten Datensocket verbunden hat und bereit ist, Daten zu empfangen.

Eine Verbesserung, um die Ausführung an dieser Stelle zu erleichtern, besteht darin, den Kontrollfluss so zu ändern, dass er anstelle von vordefinierten bools einen geparsten Antwortcode verwendet.

%Vor%

anstelle von:

%Vor%

Dann können Sie einen Abschnitt zum Senden der Daten hinzufügen:

%Vor%

Und ein bisschen mehr aufzuräumen:

%Vor%

Offensichtlich werden die Dinge komplizierter, wenn Sie mehrere Dateien usw. senden, aber dies sollte Ihren Proof-of-Concept zuverlässiger ausführen:

%Vor%     
jmuise 15.08.2016 18:01
quelle

Tags und Links