Kann nicht mit FTP Client paludern
-
Wenn ich das FTP Programm schliesse wird QUIT ausgegeben sonst nix

-
Hilfe, Bin echt am verzweifeln wiso dass nicht funktioniert

-
Ich glaube, du solltest dich mal etwas eingehender mit FTP-Protokollen beschäftigen. Und das Sleep(1000000000) am Ende deines Programmes hat auch keinen Sinn.
UND: Es kommt etwas zustande, aber nicht "zu schtande"!!! Sry aber hat mich aufgeregt
-
Hi, habe mich mit dem Beschäftigt was ich bei googel gefunden habe, und da hab ich bloss herausgefunden dass ich zuerst folgendes senden muss
220 Willkommen auf meinem FTP!
Vieleicht kennst du je eine gute site

-
Hab mich noch nie mit FTP beschäftigt, aber ich versuchs mal:
Kommandos und Überishct
Wikipedia über FTP (etwas kurz)
Wird nicht deine Lieblings-Lektüre werden
Auch nützlich, mit BefehlenDas wars fürs Erste, viel Spaß

-
Du musst wohl noch nen Zeilenumbruch mitsenden (\012 oder so).
(und noch nen Link: http://cr.yp.to/ftp.html)
-
Hi, hab jetzt herausgefunden wie ich dem FTP Client etwas senden kann, aber habe keine ahnung wiso dass so ist

377\366RE\377\374TTR abc\377\377def\015\377\376\012\012Kann mir jemand den String erklären

-
Hi, hab echt keine ahnung kann mir denn keier dass erklären bin nicht so fit in English ^^
-
/015 bedeutet wenn ich das richtig gelesn habe string-ende
/040 -leerzeichenabc\377\377def\015\377\376\012\012 - das ist ein telnet string
weiter habe ich jetzt nicht geguckt, habe nur kurz überflogen...
-
Hi, Danke mich nimmt es aber noch wunder wiso ich dazu so einen langen befehl brauche oder geht das auch noch kürzer ??
-
solche komischen strings braucht man nicht
-
Hi, so wird dass gesnedet wass ich will
send(s,"200 Wilkommen Server Ready\012",55,0);
Der Client nimmt den Text an und gibt ihn aus, aber antwortet nich.
Und noch ne wichtige Frage wass soll das \012, ohne dass wird der Text vom Client nicht angenommen und ausgegeben 
-
012 == '\n'
-
Das ist ein Seperator, durch den der FTP-Server weiß, dass das ein String ist, und das er dort zuende ist...
-
Den "telnet-strings"-Abschnitt ist in meinen Augen eigentlich nicht wirklich wichtig ?
Interessanter ist weiter unten:
A request is a string of bytes. It contains
1. a verb consisting of alphabetic ASCII characters;
2. optionally, a space followed by a parameter; and
3. \015\012.\015\012 - wenn ich mich nicht irre entspricht das \r\n (Zeilenumbruch)
Außerdem steht da:
Some clients fail to include the \015, so I recommend that servers look only for \012. The parameter cannot contain \012.
Du solltest den Befehl als FTP-Server also mit \015 und \012 abschließen, aber beim schreiben eines Clients nur auf \012 achten...
-
Hi, jetzt bin ich schon ein wenig weiter gekommen,
[R] Verbinde zu localhost -> DNS=localhost IP=127.0.0.1 PORT=21 [R] Verbunden mit localhost [R] 200 Wilkommen Server Ready [R] USER RootDanch sende ich:
send(s,"331 Password required for Root\012",55,0);Danach antworted der Client aber leider nicht mehr

-
Wie kommst du auf die 55 ?
(statt zu zählen könntest du da auch z.B. mit strlen() arbeiten für den 3. Parameter von send()...)
-
Hab jetz die richtige strlen genommen, funktioniert aber trozdem nicht hier mal der gesammte SourceCode

#include <iostream> #include <windows.h> #include <winsock.h> using namespace std; int main() { WSADATA ws; SOCKET s; SOCKET ac; SOCKADDR_IN addr; int emp_in; char username[100]; char Password[100]; char out[600]; WSAStartup(MAKEWORD(2,0),&ws); ac = socket(AF_INET,SOCK_STREAM,0); addr.sin_family = AF_INET; addr.sin_port = htons(21); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bind(ac,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); listen(ac,10); cout << "Auf FTP Verbindung warten" << endl; s=accept(ac,NULL,NULL); cout << "Neue Verbindung." << endl; send(s,"200 Wilkommen Server Ready\012",30,0); emp_in = recv(s,username,100,0); username[emp_in+1] = '0'; send(s,"331 Password required for Root\012",35,0); emp_in = recv(s,Password,100,0); Sleep(10000000); }
-
Hat den Keiner Ahnung ??

-
Du musst checken dass recv() auch das '\n' eingelesen hat

Wenn du erstmal nur testen willst, ob du die befehle richtig sendest und die Befehle vom Client erstmal ignorieren möchtest, kannst du auch alternativ erstmal VOR die recv()-Funktionsaufrufe sleeps setzen in der Hoffnung das in der zwischenzeit der kram den der ftp-client deinem server sendet auch komplett im buffer ist und von recv() in einem rutsch abgerufen werden kann

Aber: Das wäre Frickelei und allerhöchstens zu testzwecken geeignet!Wichtig:
nicht alles was der client sendet kommt auch sofort bei recv() an!
Vor allem bei lahmen Leitungen (aber auch bei lokalen verbindungen) kommt es schonmal vor das recv() mehrmals aufgerufen werden muss und der jeweiles von recv() befüllte buffer selbst zu einem ganzen zusammengebaut werden muss!