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 machen

    bis 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


Anmelden zum Antworten