Ajouter un commentaire

K-lo
[C++ | FTP ] Probleme WinInet API pour client FTP

Voilà j'ai un client FTP qui doit recupérer tous les fichiers ayant le même nom que le fichier ayant une extension ".exe"

Voici mon code (simplifié) :

//connexion :
hInternetSession = InternetOpen(L"Client FPT", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL,0);
hFtpSession = InternetConnect(hInternetSession, hote, (INTERNET_PORT)port, user, pass, INTERNET_SERVICE_FTP, 0, 0);


//liste des fichiers ayant pour nom le fichier de reference.exe
HINTERNET h_lstFTP = NULL;
std::wstring commandeList = L"NLST "+ nomDuRepertoirAParcourir + fichierDeReference+L"*";
FtpCommand(hFtpSession, TRUE, FTP_TRANSFERT_TYPE_BINARY, commandeList.c_str(), 0, &lstFTP );
char ret [4096];
DWORD dwBytesread;
if(InternetReadFile(h_lstFTP,ret, 4095,&dwBytesread){
	std::wcerr<<L"Erreur InternetReadFile\n";
}else{
	ret[dwBytesread]=0;
}
std::wstring str1 = convertionConstCharToWChar(ret); 
std::wstring strSortie;
for (std::wstring::iterator it = str1.begin(); itStr != str1.end(); ++itStr)
{
	if( *itStr != 0x0D ){
		strSortie.push_back(*itStr);	
	}
}
boost::algorithm::split(ListNomDeFichier, strSortie, boost::algorithm::is_any_of(L"\x0A"));
InternetCloseHandle(h_lstFTP);

for( std::list<std::wstring>::iterator itLFich = ListNomDeFichier.begin(); itLFich != ListNomDeFichier.end(); ++itLFich ){
	
	//...
	HINTERNET hFile;
//recuperation de la taille
        hFile = FtpOpenFile(hFTPSession, cheminVersFichierATelecahrger, GENERIC_READ, FTP_TRANSFERT_BINARY,NULL);
        if(FtpGetSize(hFile) == 0 ){
           std::cout<<"fichier de taille 0";
        }
        InternetCloseHandle(hFile);
	if(!FtpGetFIle(hFTPSession, cheminVersFichierATelecahrger, cheminDuFichierEnLocal, NULL, FILE_ATTRIBUTE_NORMAL,0,NULL)){
		std::wcerr<<"Erreur "<<GetLastError()<<"\n";
		//...
	}	

      
        //...	
}

Le souci c'est que le serveur FTP sur lequel je me connecte est sous Linux et je dois déployer le client sur une machine (pas très ressente) en Windows (windows 2000 avec la sp4). Et j'ai lors du téléchargement du fichier l'erreur 12003 ! Par conséquent lorsque j'affiche la raison de cette erreur via la fonction : InternetGetLastResponseInfo();
Il me répond : "150 opening binary mode data connction for "nomdufichier.exe"
Ce qui est un comportement "normale".
Dans la MSDN on m'informe que l'erreur vient du faite que les 2 machines ne se comprennent pas bien et qu'il faut utiliser l'indicateur INTERNET_FLAG_PASSIVE comme flag pour la fonction InternetConnect().
Sauf que ça ne fonctionne pas il me renvoi l'erreur 12029...

J'ai pas ce problème avec des machines ressentes sous windows 2000.
Ce qui m'incite à venir exposer mon problème aux personnes expérimentés :P

Merci

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  SSS   EEEE      J  RRRR   U   U 
S E J R R U U
SSS EEE J RRRR U U
S E J J R R U U
SSSS EEEE JJJ R RR UUU