Warum funktioniert der FTP Serveransatz nicht?
-
Hallo!
Ich will einen kleinen FTP Server programmieren! Jedoch sind da schon Anfangschwierigkeiten, sobald man auf den Server kommt gebe ich
"220 Server ready v0.1\xd\xa" an den Client, dann kommt ein USER username, auf dieses antworte ich mit "331 - Hello Anonymous. Please enter your password\xd\xa" , dann herrscht Stille, ich bekomme vom FTP Client kein Passwort! Die Nachricht wird auf jeden Fall erfolgreich gesendet, da ich beim Client diese Nachricht sehe!Der Hilflose...
-
Tja, selbides Problem habe ich auch. Mein Client meldet: Server hat das USER-Kommando nicht angenommen. Obwohl er im Server
if(command.substr(0,4) == "USER") { sprintf(answer, "332 Hello new user enter password..."); send(Client[i].ClientSocket,answer,STDLINE,0); printf("habe gesendet..."); }
hmmmm ...
code_pilot
PS: Natürlich wird vorher gesendet "220 ready for new user" gesendet, und direkt danach das USER empfangen und ausgewertet.
[ Dieser Beitrag wurde am 11.06.2003 um 18:56 Uhr von code_pilot editiert. ]
-
Ich habe in eines meiner programme mal ein kleiner FTP Client eingebaut. Der Client musste folgendes Senden damitd er Server was damit anfangen konnte:
"\nUSER test\n"
\n = neue Zeile
USER = FTP Befehl
test = username muss!!! Vorhanden sein ansonnsten anonymousKonnt ich weiterhelfen?
-
Jein, ich hab es jetzt aber selbst gelöst!
Das Problem lag hier:
send(Client[i].ClientSocket,answer,STDLINE,0);
ich hab einfach immer 1024 (STDLINE-Wert) zeichen gesendet, obwohl es weit aus weniger waren in answer. damit kommt wohl der client durcheinander.
Lösung:
char sendString[STDLINE]; int bytes; strcpy(sendString, "332 Hello user enter password...\n"); bytes = strlen(sendString); send(Client[cIndex].ClientSocket, sendString,bytes,0);
so funkt es mit JEDEM client :):):)
~code_pilot
-
Hi!
Habe mich heute mal wieder an meinem FTP-Server gesetzt und stehe vor einem dicken Problem: Wenn ich via NLST die Dateiliste anfordere, sendet der Client mit ja sowas wiePORT 127,0,0,1,8,33
Daraus parse ich dann mit meinem Server die IP 127.0.0.1 und Port 2081 (8*256+33). OK, ich öffne eine neue Verbindung zur angegebenen IP und dem Port 2081, und mein Server antwortet "200 Command ok". Jetzt sendet mir der Client den Befehl "NLST". Mein Server soll nun die Besätigiung "150 sending list" zurücksenden, eine Dateiliste auf dem Datenkanal übertragen und dann sagen "226 List completed". Das geht aber nicht. Zwar wird 150 übertragen, der Client empfängt das auch, aber dann passiert nix mehr. Der Server sendet, und der Client wartet und kann nurnoch mit CTRL+C beendet werden. Was mache ich falsch?
//NLST else if(strcmp(cCmd, "NLST") == 0) { sendCmd(i, "150", "file list request"); sprintf(answer, "irgendeinedatei.txt\n\r"); send(Client[i].TransferSocket, answer,strlen(answer),0); closesocket(Client[i].TransferSocket); sendCmd(i, "226", "file list end"); }
ob ich es nun mit oder ohne closesocket mache, es klappt nicht; jedenfalls das empfangen beim Client nicht. sendCmd ist eine Funktion zum senden des Kommandos über den Kommandokanal.
*heul* bitte helft mir...
~cp
-
Kann mir denn keiner helfen?
Im Web fidnet man nur schrott und auf allen pages steht es genau so, wie ich es mache ... er opened seinen data socket, schickt die scheisse rüber, sagt dann "bitte sehr" ... nur der scheiss client, der macht nix ...:(((((