Entwickler-Ecke
Internet / Netzwerk - FTP über Sockets
Fighter#1 - Di 27.12.05 22:47
Titel: FTP über Sockets
Hallo Leute,
Ich hab zwar schon ein FTP Prog mit Indy, möchte aber wissen wie
ich mit den Sockets mit nem FTP Server kommuniziere!
ich geb als Host einfach mal
http://ftp.meinserver.de ein und als Port 21
dann erhalt ich den String : 220 Willkommen. FTP Server ready.
Super!
Und wie gehn jetzt die Befehle??
Mit Socket.SendText() ist da nicht viel!!!
Fighter#1 - Di 27.12.05 22:55
Komm mir bitte nicht mit RFCs daraus werd
ich nicht schlau :-( ich meine, wenn ich auch einen
RFC befehl hinsende kommt nix zurück!
Narses - Di 27.12.05 23:04
Moin!
Sorry, aber wenn du mit RFCs nicht klar kommst, dann nimm die Indies... :roll: :wink:
cu
Narses
Mr_Sven - Di 27.12.05 23:09
Du slltest dir die Source Files von TIdFTP anschauen:
IdFTP.pas
IdFTPCommon.pas
Gruß Sven
Fighter#1 - Fr 30.12.05 18:36
Also es ist nicht so das ich nicht weiß was in der RFC drin steht
aber ich möchte wissen, wie kann ich die Befehle an den Server senden?
mit SentText() ... ist da nicht.
Gibts da ne möglichkeit, wie sendcommand ...??
Fighter#1 - Mo 06.03.06 18:37
Jaja...
Indy kann ja jeder ;-) mir gings da ganz speziell um die Sockets.
Wer das mit den Indys nicht hinkriegt ..., ohoh da seh ich *dunkel*.
In den Sockets sieht man ja das ganze Protokoll, und das ist es ja was mich interessiert.
Nicht das ich da IdFtpClient1.DownloadFile... eingebe.
Das kann ich mir aus dem Internet bei dsdt ziehn, gut für anfänger sind indys super und wenn schnell was machen will auch super . Aber ich will sehen was passiert.
Trotzdem Danke
Benutzername - Mo 06.03.06 19:24
Wieso solltest du die Methode SendTextnicht verwenden können?
Du musst doch einfach die Kommandos senden wie get, put, dir, mkdir etc. und dann auswerten, was zurückkommt.
Die FTP-Kommandos rauszukriegen sollte kein Problem sein, geht ja sogar mit Windows-Bordmitteln ohne RFCs ;)
Fighter#1 - Mo 06.03.06 19:27
Ja, ich muss mich aber z.B. Anmelden, auf USER *** PASSWORD *** reagiert der leider nicht
blaueled - Mo 06.03.06 19:54
Hallo,
ist das nicht
USER ****** (wegschicken)
Antwort erhalten, dann
PASS ****** (wegschicken)
Antwort, dass du eingeloggt bist ....
Arne
Fighter#1 - Mo 06.03.06 20:33
Ich kriege keine Antwort, egal was ich sende
caedes - Fr 31.03.06 12:29
Es funktionert mit socket.sendtext! Es ist jedoch so, dass solche Protokolle ein Befehlsende/Zeilenende erwarten. Im Falle des FTP würde das dann z.B. so aussehen:
Delphi-Quelltext
1: 2: 3:
| clientsocket1.socket.sendtext('USER abc'+#13+#10); clientsocket1.socket.sendtext('PASS xyz'+#13+#10); clientsocket1.socket.sendtext('FEAT'+#13+#10); |
Natürlich nicht alles hintereinander ausführen, sondern erst die Antworten verarbeiten.
Übrigens: Wie genau die Kommunikation über FTP handelt kannst du dir doch einmal anschauen, indem du z.B. bei FileZilla das Befehlsfenster durchliest.
Noch ein Hinweis zum Schluss:
Das FTP ist ein "Out-Of-Band" Protokoll, d.h. das auf Port 21 nur die Dateinamen usw. vereinbart werden und die eigentlichen Daten auf einem neuen Port verschickt werden.
Quelltext
1:
| 227 Entering Passive Mode (214,178,73,132,160,148) |
Wenn der Server dies sendet, weiß der Client, dass er die Daten and die IP
214.178.73.132 senden muss und dazu der Port
2708 (
160*16 +
148) serverseitig geöffnet wurde.
Fighter#1 - Mo 03.04.06 17:59
VIELEN DANK!
Funktioniert soweit super!
Xru - Mi 05.04.06 23:03
Guten Abend :)
Ich hoffe ihr könnt mir da weiter helfen. Ich verstehe das irgendwie nicht so ganz.
Also die ausgabe des LIST-Befehls bewirkt, das der Server eine Verbindung zu mir aufbaut und etwas schickt. Wohin er aufbauen soll sage ich ihm mit PORT ip,ip,ip,ip,port,port z.B. PORT 84,172,133,236,160,148. Um nun wirklich etwas empfangen zu können benötige ich doch nur nen ServerSocket wo auf angegeben PORT hört, oder?
Habe ich da irgendwo einen Denkfehler? Bzw. kann mir jemand einen Link geben wo ich genau das nachlesen kann? Irgendwie bekomme ich keine Verbindung von Server zu mir aufgebaut.
*verzweifel*
lg und danke schonmal für eure antworten
Narses - Mi 05.04.06 23:23
Moin und :welcome: im Forum!
Xru hat folgendes geschrieben: |
| Um nun wirklich etwas empfangen zu können benötige ich doch nur nen ServerSocket wo auf angegeben PORT hört, oder? |
Ja, sofern du den Server nicht in den passiven Modus geschaltet hast.
Xru hat folgendes geschrieben: |
| kann mir jemand einen Link geben wo ich genau das nachlesen kann? |
Guckst du
hier [
http://www.delphi-forum.de/viewtopic.php?p=322008#322008]. :roll: :mahn:
--- hat nix mit dir zu tun, bitte nicht persönlich nehmen ---
Jetzt mal ernsthaft, müssen wir hier wirklich RFCs durchkauen... ? :gruebel: Es gibt kostenlose Referenzimplementationen mit Delphi-Quelltext (Indies) und die RFCs selbst. IMHO sollte das genügen; wer´s damit nicht auf die Kette kriegt, sollte die Indies binär verwenden, die anderen werden´s wohl schaffen. :| Sorry, aber alles was hierbei rauskommt, sind halb-kaputte FTP-Clones... und damit wird das Standard-Protokoll immer wässriger. :?
cu
Narses
Xru - Do 06.04.06 00:49
Naja ich hatte es falsch verstanden. Egal, funktioniert nun. :)
caedes - Do 06.04.06 02:15
@Narses:
Man wird doch wohl noch üben dürfen. Wenn ich das Programm für einen kommeziellen Zweck einsetzen wollte würde ich natürlich auch die Indies o.ä. verwenden, aber wenn man doch nur einmal nachvollziehen will, wie die Protokolle arbeiten, ist es doch wohl legitim es mit den Sockets aufzubauen.
Über das andere kann und wird sich hier ja genauso aufgeregt, wenn irgendjemand an der Verwendung der gekapselten Indies scheitert, weil er die einfachsten Dinge, die dahinter stehen nicht ansatzweise verstanden und nur mit irgendwelchen Prozeduren, die er gefunden hat, im trüben fischt. Es kommt dann auch mit den Indies kein vernünftiger Code bei heraus, wenn man die Grundlagen nicht kann.
Wie oft hatten wir schon die Frage, warum beim Senden etwas "verloren" geht und bei nächsten Reiceive dann einfach wieder mit "auftaucht"? Dafür muss man einfach mal etwas von Protokollen gehört haben und etwa wissen, was bei der Übertragung genau passiert.
Die Kritik bitte nicht derart ernst nehmen. Wollte das nur einmal gesagt haben, besonders, weil dies ja auch des Thread-Öffners Intention war:
Fighter#1 hat folgendes geschrieben: |
Jaja...
Indy kann ja jeder ;-) mir gings da ganz speziell um die Sockets.
...
In den Sockets sieht man ja das ganze Protokoll, und das ist es ja was mich interessiert.
Nicht das ich da IdFtpClient1.DownloadFile... eingebe.
Das kann ich mir aus dem Internet bei dsdt ziehn, gut für anfänger sind indys super und wenn schnell was machen will auch super . Aber ich will sehen was passiert.
Trotzdem Danke |
Fighter#1 - Do 06.04.06 14:16
Xru hat folgendes geschrieben: |
| Naja ich hatte es falsch verstanden. Egal, funktioniert nun. :) |
Wie funktioniert das bei dir?
In welcher Reihenfolge schickst du die Befehle ab, wann öffnest du den Server?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!