2016-05-12 3 views
2

Ich bin ein FTP-Server als ein Schulprojekt erstellen, funktionieren die meisten Befehle und ich fast genagelt PORT (aktiven Modus für die Datenübertragung)."bare linefeeds empfangen im ASCII-Modus" Warnung beim Auflisten Verzeichnis auf meinem FTP-Server

Starten meinem Server mit ftp wie so:

ftp localhost 4242 // where 4242 is the port on which my server is listening 

Und mit dem Befehl ls nach der Anmeldung erhalte ich eine Arbeits ls Ausgabe von dieser Nachricht folgt:

ACHTUNG! 8 reine Zeilenvorschübe, die im ASCII-Modus empfangen wurden Die Datei wurde möglicherweise nicht korrekt übertragen.

Bitte beachten Sie, dass, wenn ls in ftp verwenden, ist es vor der Verwendung des LIST Befehl automatisch auf Aktiv-Modus schaltet.

Was bedeutet dieser Fehler?

Volle Leistung:

200 Active Mode Enabled. 
150 Directory listing. 
total 56 
drwxrwxr-x 4 kade_c kade_c 4096 mai 12 15:24 . 
drwxr-xr-x 38 kade_c kade_c 4096 mai 12 14:58 .. 
drwxrwxr-x 8 kade_c kade_c 4096 mai 12 15:17 .git 
-rw-rw-r-- 1 kade_c kade_c 1726 mai 11 10:35 Makefile 
-rw-rw-r-- 1 kade_c kade_c 161 mai 11 11:43 README.txt 
-rwxrwxr-x 1 kade_c kade_c 29368 mai 12 15:24 server 
drwxrwxr-x 4 kade_c kade_c 4096 mai 2 18:40 server_src 
WARNING! 8 bare linefeeds received in ASCII mode 
File may not have transferred correctly. 
226 LIST complete. 

Und schließlich ist hier der Teil des Codes, und eine Verbindung mit dem Sockel und macht die ls -la erstellt:

server_write(client, "150 Directory listing.\r\n"); 
if (connect_data(client) == -1) // Creates socket and connects to it 
    { 
    server_write(client, "520 Impossible to reach client.\r\n"); 
    return; 
    } 
ofd = xdup(1); 
xdup2(client->data.socket, 1); 
system("ls -la"); 
xdup2(ofd, 1); 
server_write(client, "226 LIST complete.\r\n"); 
close_data(client, -1); 
+0

Ihre ls Ausgabe enthält 8 leer/Leerzeilen angezeigt werden? –

+0

Wie viele Zeilen/Dateien gibt es in der Auflistung? 8? –

+0

Meine Ausgabe ist ein 'System (" ls -la ")' als 'LIST' sollte ich nicht wissen wo die Zeilen herkommen. EDIT: Ich habe die Ausgabe hinzugefügt. –

Antwort

1

Ich würde vermuten, dass Sie senden LFs an den Client, und der Client erwartet (zu Recht) CRLFs und warnt vor den fehlenden CRs.

Nach FTP-Spezifikation RFC 959, section 3.4. Transmission modes, im ASCII-Modus müssen Sie CRLF verwenden ausschließlich:

Zum Zweck der standardisierten Übertragung, der sendet Host sein inneres Ende der Leitung übersetzen oder Endes der Datensatzbezeichnung in die Darstellung, die durch den Übertragungsmodus und die Datei Struktur vorgeschrieben ist, und der empfangende Host wird die umgekehrte Übersetzung zu seiner internen Bezeichnung durchführen. ... End-of-line in einer ASCII-Datei ohne Satzstruktur sollte durch <CRLF>

Verwandte Themen