Upload af fil til FTP server

User avatar
ZeroHero
Level 36 - Tron
Posts: 362
Joined: 21 Jul 2009, 19:03
Location: England
Contact:

Upload af fil til FTP server

Unread post by ZeroHero » 21 Jul 2011, 12:03

Jeg har noget C++ kode der uploader en binær fil til en ftp server. Koden virker fint uden firewall slået til, men når min Virgin Media firewall er slået til, bliver filen godt nok uploadet men dog uden indhold. Er der nogen der har stødt ind i lign. problem og hvordan har I evt. løst det?

Hvis jeg bruger en ganske almindelig FTP program (med min Virgin Media firewall slået til) kan jeg sagtens uploade filer til min server, så der må nærmest være noget i mit kode jeg gør forkert eller mangler. Der skal nænvnes at min firewall er sat til at acceptere mit program.

Koden jeg bruger til at uploade filen er her:

Code: Select all

bool CNetwork::UploadFile( const char * Filename, const char * NewRemoteFile, const char * HostAddress, const char * Username, const char * Password )
{
   if ( Filename != 0 && NewRemoteFile != 0 && Username != 0 && Password != 0 )
   {
      HINTERNET Internet = InternetOpen( 0, INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 );
      if ( Internet != 0 )
      {
         HINTERNET FtpSession = InternetConnect( Internet, HostAddress, INTERNET_DEFAULT_FTP_PORT, Username, Password, INTERNET_SERVICE_FTP, 0, 0 );
         if ( FtpSession != 0 )
          {
             FtpPutFile( FtpSession, Filename, NewRemoteFile, FTP_TRANSFER_TYPE_BINARY, 0 );
             if ( FtpPutFile( FtpSession, Filename, NewRemoteFile, FTP_TRANSFER_TYPE_BINARY, 0 ) )
             {
                InternetCloseHandle( FtpSession );
                InternetCloseHandle( Internet );
                return true;
             }
            InternetCloseHandle( FtpSession );
         }
         InternetCloseHandle( Internet );
      }
   }

   return false;
}


Falk
Level 0 - Null
Posts: 4
Joined: 04 Feb 2011, 10:21

Re: Upload af fil til FTP server

Unread post by Falk » 21 Jul 2011, 13:59

Jeg vil tro problemet ligger i at din firewall blokerer for dataportene som ftp'en bruger. Der er to måder du kan kommunikere med en ftp på: aktiv og passiv. En alm. FTP-klient vælger selv aktiv eller passiv enten automatisk eller hvordan det er sat op. Derfor vil den i mange tilfælde altid prøve at finde den bedste måde at kommunikere på.

Du kan læse om det her fx http://slacksite.com/other/ftp.html

Nu ved jeg ikke hvordan du har implementeret din ftp klient, men jeg vil tro du bare skal ændre fra at køre aktiv til passivt. Kører du FTP serveren lokalt i dit eksempel eller på internettet? Hvis det er lokalt kan det være du skal have åbnet nogle flere porte i din firewall (og det faktisk er der problemet ligger), da din ftp-server kører passivt skal den vide hvilke dataporte den skal bruge.

Hvis du åbner et alm. ftp program kan du se om den bruger PORT eller PASV kommandoen, når den uploader filer, dette burde være en endnu bedre indikation af hvordan du selv skal gøre det.

Anyway håber det giver mening!

User avatar
ZeroHero
Level 36 - Tron
Posts: 362
Joined: 21 Jul 2009, 19:03
Location: England
Contact:

Re: Upload af fil til FTP server

Unread post by ZeroHero » 21 Jul 2011, 21:40

1000 tak for linket. Det gav mig en masse vigtig viden omkring FTP serverer.
Til de af jer der gerne vil vide svaret, så skulle der blot tilføjes INTERNET_FLAG_PASSIVE til flags, når funktionen InternetConnect() kaldes. Men det er klart anbefalingsværdigt at kigge på linket da det giver en god baggrunds viden hvad denne flag rent faktisk betyder.
Endnu engang tak!

Post Reply