C++ dauerhaft auf FTP schreiben

Simpac

Grünschnabel
Hallo.

Ich bin zweifelhaft am Suchen, wie ich eine dauerhafte Verbindung zu meinem FTP server mit C++ aufbauen kann. Das heißt, dass keine Zwischendatei erstellt wird (beispielsweise ein Textdokument, welches dann hochgeladen wird), sondern direkt eine Datei auf dem Server erstellt wird.
Die Verbindung hab ich bisher so aufgebaut.

C++:
HINTERNET hOpen, hConnection;
    hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
   
    hConnection = InternetConnect(hOpen, "127.0.0.1", INTERNET_DEFAULT_FTP_PORT,
                                     "anwender", "anwender", INTERNET_SERVICE_FTP, 0, 0);

[....................]

InternetCloseHandle(hConnection);
    InternetCloseHandle(hOpen);

Nun, um Textdokumente hochzuladen, würde ich Folgenden Code verwenden:

C++:
FtpPutFile(hConnection, "KEINE AHNUNG", "Dateiname.txt",
                  FTP_TRANSFER_TYPE_ASCII, 0);

Weiß wer, wie ich meine Idee umsetzen kann?

Mfg Simon
 
Hallo,

welche Bibliothek verwendest du denn derzeit für den FTP Zugriff?

Verwendest du C++ pur, oder C++ .Net?

Im C++ .Net Fall könntest du einfach mit einem (FTP)WebRequest eine Datei / bzw. byte[] uploaden:
http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx#Y0

Falls es eine reine C++ Klasse sein soll könntest du mal:
http://www.codeproject.com/Articles/8667/FTP-Client-Class
versuchen.

Ansonsten schau mal hier:
http://stackoverflow.com/questions/1244095/c-ftp-library

Gruß Tom
 
Du könntest folgendes versuchen:
1. Setze deinen Type "TYPE <type>\r\n" an CtrlPort
2. fordere passive Verbindung an, merk dir den Port, den du als Antwort erhältst
3. Erstelle nen data_Socket und verbinde zum Host mit dem passiven Port
4. Sende "STOR <fileName>\r\n" an CtrlPort
--> Jetzt werden Daten am passiven Port des FTP - Servers erwartet
5. Sende deine Daten, die du z.B über iostream eingibst an den passiven Port des Servers
6. Schließe die Verbindung zum passiven Port closesocket(data_Socket), wenn du fertig bist mit deinen Eingaben
--> Server erwartet nun weitere Befehle am CtrlPort.

Ich weiss jedoch nicht, wann der Timeout der Verbindung zum data_port des Servers ist,
steht bestimmt iwo im Protokoll.
Die Verbindung sollte jedoch einige Zeit erhalten bleiben, das kannst du aber abfangen und bei weiteren Eingaben eine neue Verbindung aufbauen.

Edit: Für die Verbindung zur Datenübertragung wird TCP verwendet.
 
Zuletzt bearbeitet:
@Thomas:
Ich programmiere mit "microsoft Visual C++" eine Konsolenanwendung. Ich kann das jetzt nicht direkt zuweisen, wo der Unterschied zwischen dem puren C++ oder dem .net ist. (ich denke mal es ist .net).
Ein Beispielprogramm wäre jetzt die Rettung: Es öffnet sich eine Dos-Box und alles was man in diese reinschreibt, wird an den Ftp server gesendet. Ich möchte jetzt keinesfalls dreist wirken, aber könnte sich einer die Mühe machen, eins zu schreiben?


@Eburneolus
Ich bin noch ziemlicher Anfänger, was C++ angeht (lerne es in der Schule seit 1,5 Jahren) und denke, deine Methode scheint schon zu weit Fortgeschritten zu sein :(
 
Hi

Für den Unterschied: Link
Wenn man sich unsicher ist, stehen im Link ganz unten Erkennungsmerkmale.

In so einem mit Visualtudio geschriebenen "C++"-Programm kann normales
und .NET-lastiges durchgemischt werden.
Dein Codestück im ersten Beitrag ist zwar pures C++,
ist aber wie gesagt keine Garantie auf .NET-Freiheit.

Solange dein Programm nur unter neueren Windowsversionen laufen soll,
ist es im Prinzip egal, was du nimmst.
Problem wird aber der Lehrer.
Wenn C++ gelernt werden soll, wird er die .NET-Variante wahrscheinlich nicht akzeptieren.

@Eburneolus: Dein Link ist für Windows CE.
 
Zurück