tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
2858
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    Ich habe nun seit drei Stunden gesucht und immer noch kein Tutorial oder Beispiel gefunden, wie ich eine ftp Verbindung herstellen kann. Ich habe das Tutorial von cworker durchgearbeitet und soweit fast alles verstanden, jedenfalls hat es funktioniert. Nun möchte ich eine Verbindung zum ftpServer mit Passwort und Benutzername herstellen und eine Textdatei auslesen. den Socket bekomme ich nun dank cworker gestartet aber weiter komme ich nicht. Mein Code bisher:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
     
     
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
     
    int main()
    {
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
     
     
      // Winsock starten
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }
     
      // Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
      if(s==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        system ("Pause");
        return 1;
      }
      else
      {
        printf("Socket erstellt!\n");
      }
      //Hier ist der Socket offen
      printf("Verbindung besteht\n");
      //Hier ist der Socket offen
     
      closesocket(s);
      printf("Socket geschlossen\n");
      WSACleanup();
      system ("Pause");
      return 0;
    }

    Danke im Voraus
     

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.500
    Hi

    FTP ist eine ziemlich komplizierte geschichte...
    Willst du wirklich die ganzen Sachen selber ausprogrammieren
    Wenn ich mich richtig erinnere,
    gibt es für HTTP und FTP schon fertige Funktionen, die alle wichtigen Sachen automatisch machen.
    Weis jetzt nicht genau wie die heißt, werd einmal nachschauen,
    sonst findet man die sicher beim MSDN
    Für so komplexe Protokolle wie FTP wäre das sicher die einfachste Lösung statt alles selber zu machen.

    Gruß
     

  3. #3
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    ich hab bei msdn schon geguckt, aber nichts gefunden.

    was meinst du mit funktionen? funktionen, die ich aus einer bibliothek brauche? externe dlls oder was? ich hab gehört, das das recht einfach sein soll.
     

  4. #4
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    Hat sich was ergeben, kann mir jemand weiter helfen? Im Gruden genommen ist mir egal wie das geht. Ob mit oder ohne Bibliothek, hauptsache kostenloß. Ansonsten gibt es im letzten Kapitel des Petzold (Windows Programmierung) ein beispiel, welches bei mir allerdings nicht geht. Ich hab auch nur den Text der c++ Datei, wenn also jemand den gesammten Surecode hat (also ein Buch mit CD) würde mir auch weiter helfen. bei mir (mit dev c++) kommen nur fehlermeldungen, die ich nicht verstehe. wie:

    DWORD hallo;

    DWORD first use this function

    obwohl dword doch eigentlich bekannt sein müsste aber egal,

    also bitte helft mir bei diesem Problem.

    Danke

    Sönke
     

  5. #5
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Nur durch Erstellen eines Socket hast du noch keine Verbindung

    printf("Verbindung besteht\n"); stimmt einfach nicht

    Bis dahin hast du gerade mal einen Kanal geöffnet über den du eine Verbindung herstellen kannst
    Um auf dem Socket eine FTP Verbindung herzustellen müsstest du das ganze FTP Protokoll implementieren,
    Schau mal bei MSDN unter Stichwort WinInet, das sollte helfen
     

  6. #6
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    so nach längerem suchen habe ich folgendes gefunden: ist zwar ohne socket aber egal:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
     
    #include <iostream>
    #include <windows.h>
    #include <wininet.h>
     
     
    int main(int argc, char *argv[])
    {
        if (argc != 2)
        {
            ::std::cout << "Usage: ftpcmd <host>" << ::std::endl;
            system ("Pause");
            return 0;
        }
     
        // Initialize WinInet
        HINTERNET hSession = InternetOpen("FtpCmd Utility", 
                                          INTERNET_OPEN_TYPE_PRECONFIG, 
                                          NULL, 
                                          NULL, 
                                          0);
     
        // Setup connection
        HINTERNET hConnection = InternetConnect(hSession, 
                                                argv[1], 
                                                INTERNET_DEFAULT_FTP_PORT,
                                                NULL,
                                                NULL,
                                                INTERNET_SERVICE_FTP,
                                                0,
                                                0);
     
        HINTERNET hResponse;  // To be used for the response info
        
        BOOL bRet = FtpCommand(hConnection, // WinInet Connection handle
                               TRUE,        // Yes, I expect a response
                               FTP_TRANSFER_TYPE_ASCII, // I'm receiving ASCII
                               "LIST",      // This is the FTP command I am passing
                               0,           // No context needed
    /* der hier ist zu viel*/  &hResponse); // The handle to read the response  
     
    //sowie Fehler Linker error undefindet reference to FtpCommandA obwolm ich die
    //Lib wininet eingebunden habe, die eigentlich dafür zuständig sein soll.
     
        if (!bRet)
        {
            ::std::cout << "FtpCommand failed, error: " << GetLastError() << ::std::endl;
            system ("Pause");
            return 0;
        }
     
        char buff[4096];
        DWORD dwBytesRead;
     
        // Read the response
        bRet = InternetReadFile(hResponse, 
                                buff,
                                4095,
                                &dwBytesRead);
        if (!bRet)
        {
            ::std::cout << "InternetReadFile failed, error: " << GetLastError() << ::std::endl;
                    system ("Pause");
            return 0;
        }
        // Null terminate response
        buff[dwBytesRead] = 0;
     
        ::std::cout << "Buffer:\n" << buff << ::std::endl;
                system ("Pause");
    }

    Fehler Linker error undefindet reference to FtpCommandA obwol ich die
    Lib wininet eingebunden habe, die eigentlich dafür zuständig sein soll.

    ist es das, was du meinst? der internetexplorer wird doch dazu benötigt oder? ich hab ihn jedenfalls in version 7 da ich den code auch nicht zum ausführen bekomme, weis ich auch nicht, was ich wie verändern kann um ihn für mich zu nutzen.

    mein dev c++ meckert außerdem, dass die Funktion FtoCommand zu viele Parameter hat, der letzte ist zuviel.
     

  7. #7
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Ja, das ist WinInet
    Mit dem linker Error kann ich dir auf Anhieb nicht helfen, ich habe einen anderen Compiler und verwende nur HTTP Server
    aber einen Browser braucht man dazu nicht, man kann die Antwort vom Server innerhalb vom Script verarbeiten
     

  8. #8
    soeni1987 soeni1987 ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    79
    na ich denke man braucht den browser (laut msdn) um eine bestimmte dll zu haben. weis aber nicht. ansonsten was kann ich denn sonst machen?
     

Ähnliche Themen

  1. VPN-Verbindung erstellen
    Von Ethillias im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 16.03.10, 21:46
  2. Winsock Verbindung aufrecht halten
    Von Hagrid im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 27.03.08, 18:25
  3. WinSock Verbindung / "Left" Befehl will nicht so recht...
    Von XanRaZoR im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 27.02.08, 23:00
  4. Verbindung zu Server erstellen über Winsock
    Von AK_ich im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 09.07.07, 08:50
  5. VPN Verbindung mit VB6 erstellen
    Von DefStevo1985 im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 23.11.06, 08:28