PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei auf FTP hochladen


HaGGiSaG
24.06.2004, 09:46
Hallo,
ich möchte eine Datei auf einen FTP-Server hochladen.
Das generelle über die Sockets ist bereits funktionsfähig. Die Frage ist nun, wie ich direkt zu meinem FTP-Server connecte und dann die Datei hochladen kann?

Wäre super nett, wenn mir jmd. helfen könnte!


Cord Worthmann
24.06.2004, 11:41
ftp verfügt über einige wenige commandos und antwort-codes.
die entsprechenden commands musst du an den server senden - je nach server-antwort kannst du dann die upload-daten senden oder nicht.
ist im grunde genauso, wie ftp über die console ausführen.

es gibt etliche beispiele im web für ftp-clients, auch sehr einfache...
ich würde mich am besten da mal umtun.


grtz
chief

HaGGiSaG
24.06.2004, 16:05
joa schon, das problem ist aber, dass ich befehle wie "put" oder ähnliches nicht einfach in den quellcode schreiben kann... oder etwa doch???
versuche das jetzt über die klasse CInternetConnection, aber irgendwie bekomme ich immer wieder einen fehler :(

HaGGiSaG
24.06.2004, 16:40
ähm.. die klasse heißt CInternetSession und die fehlermeldung wenn ich auf das methode GetFTPConnection zugreifen will ist:


nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpd.lib(delop.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/projekt2004.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Ich geh mal davon aus, dass es nur an den Headerdateien liegen kann, die mir probleme machen und irgendwas neu definieren...

Der Quellcode für diese Stelle ist der folgende:

/* Windows-System */
#ifdef _WIN32
#include <afxinet.h>
#include <winsock.h>

/* UNIX-System */
#else
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#endif

#define AF_INET 2

int fkt_socket()
{
/* Winsock initialisieren */
#ifdef _WIN32
WSADATA wsaData;
if(WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
{
cout << "WSAStartup(): Winsock konnte nicht initialisiert werden!" << endl << endl;
exit(EXIT_FAILURE);
}
#endif

/* Socket anfordern */
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1)
{
cout << "socket(): Socket konnte nicht angefordert werden!" << endl << endl;
}

/* Internetverbindungsparameter festlegen */
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
//serv_addr.sin_addr.s_addr = inet_addr("192.168.209.99");
serv_addr.sin_addr.s_addr = (unsigned long) gethostbyname("compspec.de");
servent* serviceinfo = getservbyname("http", "tcp"); // Port ermitteln
serv_addr.sin_port = serviceinfo->s_port;

/* Verbindung mit dem Internet herstellen */
if(connect(sockfd, (sockaddr *) &serv_addr, sizeof(sockaddr)) == -1)
{
cout << "Verbindung konnte nicht hergestellt werden!" << endl;
cout << "connect(): " << WSAGetLastError() << endl;
cout << endl;
}
else
{
cout << "Dateiupload..." << endl << endl;
CInternetSession ftp;
if(ftp.GetFtpConnection("192.168.209.99", "anonymous", "test@test", serv_addr.sin_port))
{
cout << "test" << endl << endl;
}


}

return 1;
}


Wäre nett, wenn mir da einer weiterhelfen könnte...
Ich nehm an, dass es an dem zusammenspiel zwischen der winsock.h und der afxinet.h liegt...

butterkeks
25.06.2004, 19:47
Hab so auf die schnelle das hier bei google gefunden:
http://www.sequiter.com/support/kb/?article=C01061

Ist zwar net ganz allgemein gefasst, könnte aber trotzdem bei dir funktionieren.
Wenn nich, dann in die Hände gespuckt und auf http://google.de