Socket FTP DIR Comand funktioniert nicht

Hallo, ich bin derzeit dabei eine FTP Klasse zu Schreiben, verschiedene Funtionen funktionieren auch schon aber ich möchte mit nun mit Dir die Verzeichnisse Ausgeben Lassen. habe folgenden Code

    public  ArrayList<String> listall(){
       try {
           get = new Scanner(server.getInputStream());
           set = new PrintWriter(server.getOutputStream(),true); 
           
           set.println("TYPE A " +"
");
           ServerRequest=get.nextLine();
           set.println("DIR" +"
");
           ServerRequest=get.nextLine();
           
       } catch (IOException ex) {
           Logger.getLogger(SockFtpClient.class.getName()).log(Level.SEVERE, null, ex);
       }
       return null; 
    }

Der fehler ist immer

500 Syntax error, command unrecognized.

500 Syntax error, command unrecognized.

Übersetz Dir das dochmal :wink:

ja das der Syntax falsch ist, aber was ist daran falsch ? da komm ich nicht drauf. :frowning:

Was bedeutet der Teil nach dem Komma?

dass das Kommando unbekannt ist, aber Andy16823 kannst du damit doch lieber nicht nerven
(edit: Erkenntnis auch schon im Titel genannt: „Socket FTP DIR Comand funktioniert nicht“)

ist auch gar nicht so verständlich

listet unter den Befehlen

dir
Zeigt den Inhalt des aktuellen Arbeitsverzeichnisses auf dem Server an. Gleichlautend mit dem Befehl der Microsoft Windows-Eingabeaufforderung dir. Äquivalent zu dem Befehl ls

da kann man das durchaus versuchen, geht ls besser?

nein, ls ist das gleiche

500 Syntax error, command unrecognized.
funktioniert beides nicht

Ich wollte ihm den Weg zeigen, wie er selber drauf kommt.
Irgendwoher hat er ja auch das LIST bekommen.

Mir sind solche Sachen bekannt(CP/M…VMS… Linux)

ähm , es gibt echt ftp-server die “dir” und “ls” verstehen ? dachte das command wäre “LIST”

ich habe es mit ls, dir und list versucht und bei allen ist es dasselbe?

Andy, schick dem Server mal ein help

Die üblichen FTP-Befehle sind z.B. hier aufgelistet.

Kommt der Fehler wirklich in Zeile 8 oder schon in Zeile 6?

bye
TT

ja da sind die bei, nur wenn ich diese nun nutzen möchte Kommt sowohl beim Server als auch beim Client diese meldung bei allen 3 Methoden

@Timothy_Truckle

Nein die Funktioniert, nur das ausgeben der Verzeuichnisse nicht

bist Du eigentlich schon beim Server authentifiziert?

bye
TT

ja ist alles schon passier, erstellen von verzeichnissen geht auch schon also muss ich ja Authentifiziert sein

LIST

Syntax: LIST [remote-filespec]
If remote-filespec refers to a file, sends information about that file. If remote-filespec refers to a directory, sends information about each file in that directory. remote-filespec defaults to the current directory. This command must be preceded by a PORT or PASV command.

schon mal mit PASV oder PORT versucht ?

ja, hab es schon mit nem Daten Port und der Passiven Übertragung oder verbindung versucht half auch nicht

So ich glaube es hängt am Port :smiley:

Das giebt mein XAMPP aus

(000092)21.08.2013 20:17:08 - (not logged in) (127.0.0.1)> Connected, sending welcome message…
(000092)21.08.2013 20:17:08 - (not logged in) (127.0.0.1)> 220 Wilkommen im Server
(000092)21.08.2013 20:17:08 - (not logged in) (127.0.0.1)> USER Andy
(000092)21.08.2013 20:17:08 - (not logged in) (127.0.0.1)> 331 Password required for andy
(000092)21.08.2013 20:17:08 - (not logged in) (127.0.0.1)> PASS ****
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> 230 Logged on
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> PASV
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,244,69)
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> TYPE A
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> 200 Type set to A
(000092)21.08.2013 20:17:08 - andy (127.0.0.1)> LIST
(000092)21.08.2013 20:17:19 - andy (127.0.0.1)> 425 Can’t open data connection.
(000092)21.08.2013 20:17:56 - andy (127.0.0.1)> disconnected.
(000091)21.08.2013 20:18:19 - andy (127.0.0.1)> 421 Connection timed out.
(000091)21.08.2013 20:18:19 - andy (127.0.0.1)> disconnected.

da haut irgendwas nicht hin

PASV bedeutet das du in den passiven modus wechselst
dabei öffnet der FTP-server einen weiteren port an den du dich verbinden kannst und gibt dir dessen spec : ip und port (wobei in deinem beispiel “(244<<8)|69” = 62533)
und auf PASV sowie die antwort folgt dann vom client eine verbindung an den vom server gemeldeten port über den dann die daten laufen

bedeutet : du setzt über die command-verbindung den befehl LIST ab, musst das ergebnis aber auf der data-verbindung auslesen

in deinem beispiel würdest du nämlich keine auflistung bekommen sondern nur die command-bestätigung

so wie das code-stück aussieht kann man von ausgehen das du versuchst FTP selbst nachzubauen, und bist dabei nicht wirklich erfolgreich
vielleicht würde es doch helfen mal den gesamten code zu posten
ich wette das in deinem gesamten code keine data-verbindung aufgebaut wird, was der server auch prompt mit nem error quitiert da er die ja keine daten senden kann

um es also noch mal zusammen zu fassen

nach dem du PASV über die command-verbindung abgesetzt hast bekommst du über die command-verbindung eine antwort mit dem muster ip1,ip2,ip3,ip4,p1,p2 wobei die ip als dezimale schreibweise übergeben wird (also z.b. 127,0,0,1,x,x für 127.0.0.1) und der port als byte-split, also einmal die ersten 8bit und dann die letzten 8bit, die man dann einfach mit shift und or wieder zur richtigen port-nummer zusammenbauen kann

dann hast du die data-adresse an die du dann einen neuen socket aufbaust und ebenfalls einen read-loop ran hängst (natürlich multi-thread)

wenn du dann über die command-verbindung LIST absetzt und das 200 bekommst wird dir über die data-verbindung der inhalt zugeschrieben

ps : wenn du das schon nicht bekommst versuch dich bitte erstmal etwas genauer mit FTP zu befassen bevor dein nächstes topic kommt in die richtung : file hoch-/runter-laden
wir helfen dir gern wenn es hier und dort hakt, aber erklären dir nicht das komplette FTP oder schreiben für dich deinen client