ftp upload problem
-
hallo
ich möchte gerne ein programm schreiben das zu einem bestimmen zeitpunkt eine datei auf einen ftpserver schickt
jetzt habe ich schon alles versucht ich habe mit ethereal geschaut wie es andere programme machen usw aber ich kann einfach nicht in die datei schrieben
ich möchte es nicht mit den Internet() funktionen machenbis jetziger quelltext:
#include <iostream> #include <winsock2.h> #include <windows.h> using namespace std; #pragma comment(lib,"wsock32.lib") #define EOL "\r\n" #define CUTT buffer[ret] = '\0'; typedef struct threadd { char serv[200]; } TDATA; int main() { TDATA td; strcpy(td.serv, "home.pages.at"); char buffer[1024]; char messageline[255]; WSADATA ws; SOCKET hserver; int port; int ret; SOCKADDR_IN SockAddr; if ( WSAStartup(MAKEWORD(1, 1), &ws) ) { cout<<"Error: Kann Winsock nicht finden"<<endl; return(1); } hostentry = gethostbyname(td.serv); if (hostentry == NULL) { cout<<"Error: Kann den SMTP Server("<<td.serv<<")" <<"nicht finden "<<endl; return(1); } hserver = socket( PF_INET, SOCK_STREAM, 0); if (hserver == INVALID_SOCKET) { cout<<"Error: Cannot open mail server socket"<<endl; return(1); } SockAddr.sin_family = AF_INET; SockAddr.sin_port = htons(21); SockAddr.sin_addr = *((LPIN_ADDR)*hostentry->h_addr_list); if (connect( hserver, (PSOCKADDR) &SockAddr, sizeof(SockAddr))) { cout<<"Error: Connecting to Server socket failed"<<endl; return (1); } //*************talk*************** ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "USER username%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "PASS passwort%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "feat%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "pasv%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "type i%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "type a%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "cwd /%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "pasv%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; ret = recv(hserver, buffer, sizeof(buffer), 0); CUTT cout << buffer << endl; sprintf(messageline, "stor test.txt%s", EOL); send(hserver, messageline, strlen(messageline), 0); cout << messageline << endl; getchar(); return 0; }eine datei wird erzeugt aber wie kann ich dan in diese datei etwas schrieben???
vielleicht kann mir wer helfen...mfg kathl
-
Du musst eine 2. "data connection" aufbauen und darüber die daten übertragen...
Das dürfte dich interessieren:
http://cr.yp.to/ftp.html
-
du meinst ich muss ne 2te verbindung aufbauen auf nem anderen port und das dann von dort aus schicken oder wie???
(so hab ich halt die anleitung gedeutet...)mfg kathl
-
wenn du pasv sendest (passiver client), sendet der srv (glaube ich) einen string mit (z.b.) 80,90,100,200,245,256. das heißt ip:80.90.100.200 port 245*256+256 (1.port*256+2.port)
dahin werden die ganzen daten hingeschickt (z.b. list)
jetz kanns ja sein dass man an den srv an den port 245*256+256 die daten sendet??
einfach mal ausprobieren das hab ich mir jetz nur überlegt (das mit list stimmt)
-
loool ja das mit dem string stimmt...
aber immer wenn ich mich dann wieder verbinden will kommt eine fehlermeldung:SockAddr.sin_family = AF_INET; SockAddr.sin_port = htons(256*x+y); // das is der port SockAddr.sin_addr.s_addr = inet_addr("195.58.176.133"); // und die ip if (connect( hserver, (PSOCKADDR) &SockAddr, sizeof(SockAddr))) { cout<<"Error: Connecting to Server socket failed"<<endl; }ich bekomme dann immer eine fehlermeldung
kanns sein das ich einen gnaz neuen server starten muss???mfg kathl
-
habs mit nem neuen socket versucht geht auch nick

mfg kathl