PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Connecten zum FTP-Server...


HaGGiSaG
18.06.2004, 13:30
Hallo,

ich arbeite gerade an einem Projekt für die Schule, welches nach Aktualisierung einer Datei, diese auf einen FTP-Server automatisch hochladen soll.
Ich habe Winsock initialisiert und und den Socket angefordert:

/* 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;
}


Jetzt lege ich die Internetverbindungsparameter fest und versuche anschließend zu connecten...


/* Internetverbindungsparameter festlegen */
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("compspec.de");
servent* serviceinfo = getservbyname("ftp", "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 << "connect(): Verbindung konnte nicht hergestellt werden!" << endl;
perror ("connect()");
cout << endl;
}


Leider bekomme ich immer das "Verbindung konnte nicht hergestellt werden!... Mit perror ("connect()") gibt bekomme ich allerdings "No Error" ausgegeben!
Das komische ist, dass es auf meinem "Heimapache" funktioniert. Wenn ich die 127.0.0.1 und http, tcp eingebe, bekomme ich keinen error...
Kann mir einer helfen? Ist super wichtig...

Außerdem müsste mir dann einer das weitere vorgehen mit dem FTP bissl erklären. Habe zwar Befehle für den FTP wie "login" und ähnliches gefunden, aber wie ich diese anzuwenden habe finde ich absolut nirgendwo!

Grüße
HaGGiSaG


z3r0x
18.06.2004, 13:46
ftp://ftp.rfc-editor.org/in-notes/rfc354.txt

Gruß z3r0x

butterkeks
18.06.2004, 15:01
Probier mal WSAGetLastError() anstatt perror()

HaGGiSaG
18.06.2004, 15:46
wenn ich anstatt von perror WSAGetLastError() verwende kommt der folgende fehler: 10049

@ z3r0x: diese seite hab ich nun schon viel zu oft hoch und runter gelesen. wie ich das nun aber in c++ code umzusetzen habe, kann ich leider trotzdem nicht erkennen :(

z3r0x
18.06.2004, 16:41
WSAEADDRNOTAVAIL

(10049)

Cannot assign requested address.

The requested address is not valid in its context. Normally results from an attempt to bind to an address that is not valid for the local machine, or connect/sendto an address or port that is not valid for a remote machine (e.g. port 0).


Btw: Was verstehst du denn an diesem RFC nicht, bzw. welchen Part davon kannst du nicht umsetzen?


Gruß z3r0x

HaGGiSaG
18.06.2004, 17:08
ok, anscheinend, kann ich nur mit ip's handeln... ;) denn compspec.de müsste eigentlich stimmen als ftp-server ;)

das rfc erklärt für mich nicht, wie ich per code nun eine datei zum ftp hochlade...
habe mir ftp-befehle runtergeladen wie zum beispiel "login" aber wie der login anzuwenden ist steht nirgendwo. --> beispielsweise login(compspec.de, user, pw) oder so :D

wäre nett, wenn mir mal einer vllt. auch an nem codebeispiel erklären könnte, wie ich diese datei letztendlich hochlade, bzw. zumindest mal zum ftp richtig connecte... anscheinend geht es ja mit meiner version nicht :(

ist es vielleicht möglich, dass meine lösung nur im netzwerk funktioniert, also nicht mit internetservern???

butterkeks
18.06.2004, 17:41
inet_addr("compspec.de");

inet_addr() kann afaik keinen Hostnamen umwandeln, sondern nur "stringifizierte" IPs.
Um den Namen aufzulösen musste mit der getHostByName() Funktione arbeiten, dann sollte's auch im Internet funzen

HaGGiSaG
22.06.2004, 15:54
jo, mit der funktion gethostbyname() funktioniert die verbindung. jetzt ist die frage, wie bekomme ich eine datei auf den server geladen???
kann mir dazu vielleicht auch einer etwas sagen?

ist super wichtig...

danke im vorraus!