Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » FTP-Client unter Unix, kein Response ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.02.2007, 09:23 Uhr
~Biasto
Gast


Hallo,

ich will einen simplen FTP-Client programmieren, der mir schlicht weg, eine Socket-Verbindung herstellt, mich an einem Remote-FTP-Server anmeldet, und mir dann in ein bestimmtes Verzeichnis wechselt, und von dort eine CSV-Datei abholt!

Folgendes habe ich schon codiert:


Code:

    struct hostent *host;
    struct sockaddr_in addr;
    UI4 sock, n,buffer_len, socket_status;
    char buffer[BUF_SIZE];
    char buffer_recv[BUF_SIZE];
    SI1 ftp_connection = 0;
    struct servent *sptr;
    
    
    sprintf(IPHost, "172.19.181.208\0"); /* Hostaddresse*/
    
    socket_status = inet_pton(AF_INET, IPHost, &addr.sin_addr);
    
    /* Socket aufmachen, um Verbindung herzustellen */
    
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1)
    {
        printf("Create Socket failed!\n");
    }
    else
    {
        printf("Create socket succeeded\n");
    }
    /* Verbindung aufbauen */
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(SERV_PORT); /* SERV_PORT ist 21 */
    
    socket_status= connect(sock, (struct sockaddr*)&addr, sizeof(addr));
    if(socket_status == -1)
    {
        perror("Connect() failed!\n");
    }
    else
    {
        n = recv(sock, buffer_recv, strlen(buffer_recv), 0);
        printf("Connect succeeded!\n");
        buffer_recv[n] = 0; /* terminate string */
        fputs(buffer_recv, stdout);
        
        ftp_connection = 1;
    }
    /* am socket lauschen bzw. kommunizieren */
    if (socket_status == 0)
    {
            while(ftp_connection == 1)
            {
            
            fgets(buffer, BUF_SIZE, stdin); /* Zum debuggen mit STDIN-Eingabe */
            /*sprintf(buffer, "USER Administrator\r\n");*/
            buffer_len = strlen(buffer);
            n = send(sock, buffer, strlen(buffer), 0);
        
            n = recv(sock, buffer_recv, strlen(buffer_recv), 0);
            if(n < 0)
            {
                perror("Receive error\n");
            }
            buffer_recv[n] = 0; /* terminate string */
        
            fputs(buffer_recv, stdout);
            }
    }



Also die Adresse wird umgesetzt, der Port auch.
Der Socket wird erstellt, und auch das connect() ist erfolgreich.

Nun stehe ich aber da! Ich bekomme keine Nachricht vom Server, obwohl ich sowas erwartet hätte,
ich kann auch senden was ich will... ich bekomme nie was zurück! Demnach spricht das nicht grade für große Funktionalität.

Kann mir jemand weiterhelfen, was ich falsch mache ?
Oder fehlt noch irgendeine Kennung, um den FTP-Server ansprechen zu können ?

Es handelt sich dabei um den Standard-FTP-Server von Windows 2000, der Zugriff erfolgt von einem Solaris 10 System auf x86 (AMD).

Wäre nett, wenn mir jemand helfen oder zumindest den entscheidenen Tipp geben könnte.

Vielen Dank,
Gruß Biasto
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.02.2007, 10:07 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Ein Protokoll, wie FTP eins ist, kannst du dir wie eine Unterhaltung vorstellen. Du sagst dem Server was und der Server macht, was du ihm sagst - und zwar nur das. Wenn du eine Verbindung herstellst, musst du ihm noch mit den vom Server bereitgestellten Befehlen sagen, was genau du machen willst.

Ich weiß nicht, ob dir das soweit klar ist, da ich außer USER nicht hab finden können, was du an den Server schickst (du liest ja von STDIN und sendest das eingegebene). Evtl. hilft dir ja diese Seite weiter - sehr lesenswert, wenn man sich mit FTP beschäftigen will.
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.02.2007, 11:08 Uhr
~Biasto
Gast


Die Art und Weise,

einer Verbindung ist mir schon klar.
Mein Problem liegt jetzt daran, dass ich überhaupt keine Antwort des Servers erhalte, egal was ich ihm schicke!

Ich vermutete, zumindest eine Begruessung des Servers zu erhalten, oder eben mit USER und PASS-Befehlen, zumindest die Authofizierung zu erreichen. Egal was ich sende, es kommt nichts zurück!
Nicht mal irgendein Fehlercode, womit ich rechnen würde, wenn der Server was bekommt, womit er nichts anfangen würde!

Hat dort jemand eine Idee, was es sein könnte?

Danke schonmal,
Biasto
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.02.2007, 11:54 Uhr
Pablo
Supertux
(Operator)


Wieso benutzt du


C++:
recv(sock, buffer_recv, strlen(buffer_recv),0)



anstatt



C++:
recv(sock, buffer_recv, sizeof(buffer_recv),0)



?

buffer_recv ist ein char[BUF_SIZE] und ist nicht initialisiert, ein strlen(buffer_recv) ist somit undefiniert
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.02.2007, 13:18 Uhr
Bruder Leif
dances with systems
(Operator)


Fuer die Dateiuebertragung wird es noch wichtig, dass FTP normalerweise zwei Sockets benutzt, einen fuer die Kontrollbefehle und einen fuer die Daten...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.02.2007, 17:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Bruder Leif:
Fuer die Dateiuebertragung wird es noch wichtig, dass FTP normalerweise zwei Sockets benutzt, einen fuer die Kontrollbefehle und einen fuer die Daten...

darum wärs sinnvoller einen scriptbaren ftp-client für die konsole zu verwenden, bei ncftp geht das imho.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: