cs_stillfelil
Messages postés108Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention12 septembre 2009
-
11 nov. 2006 à 15:46
cs_stillfelil
Messages postés108Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention12 septembre 2009
-
15 nov. 2006 à 22:11
Bonjour
je vien de cree une application sous windows; qui se connecte a un serveur FTP via ligne de commande
String down_cmd = "cmds.txt";.
String CMD = "ftp -v -s:"+down_cmd;
Process proc = Runtime.getRuntime().exec(CMD);
j'utilise un fichier de commande pour telecharger un fichier (via get)
mais voila je voudrais que mon application attende la fin du telechargement du fichier
j'ai utilise waitFor() et sa ne marche pas
le process ne se termine pas, alors que j'ai dans me fichier la comande de deconnexion:
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 11 nov. 2006 à 16:16
Salut,
pourquoi ne pas te faire ton truc ftp en pur java ??? c'est assez simple suand meme....
sinon concernant waitFor() enfait il attend la fin du binaire executé avec le exec donc dans le cas d'un exec ftp seul la comande bye arretera le process et non la fin de recption d'un fichier....
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_stillfelil
Messages postés108Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention12 septembre 20093 11 nov. 2006 à 16:21
C'est vrais
je utilise hier un fichier que j'ai trouve FtpConnection.java
il marche tres bien sur tous les serveurs FTP ,mis a part un seul ,selui sur lequel je dois travailer, et croi moi j'ai fait des pieds et des mains, et je n'es pas touve le probleme
- connexion en mode passif ; il bloque sur l'ouverture du socket pour recuperer la list des fichier "LIST" ,comme si que le serveur FTP nouvrait pas le port
alors qu'avec FileZilla sa marche tres bien
oqwtkt fgdwv swg fg xkxtg c igpqwz
Vous n’avez pas trouvé la réponse que vous recherchez ?
private boolean openPasv() throws IOException
{
//On passe en mode passif
String tmp = getExecutionResponse("PASV");
System.out.println("tmp:"+tmp);
String pasv = excludeCode(tmp);
//On récupère l'IP et le PORT pour la connection
pasv = pasv.substring(pasv.indexOf("(")+1,pasv.indexOf(")"));
String[] splitedPasv = pasv.split(",");
int port1 = Integer.parseInt(splitedPasv[4]);
int port2 = Integer.parseInt(splitedPasv[5]);
int port = (port1*256)+port2;
String ip = splitedPasv[0]+"."+splitedPasv[1]+"."+splitedPasv[2]+"."+splitedPasv[3];
ab2oulem
Messages postés4Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention15 novembre 2006 15 nov. 2006 à 10:07
Salut,
Voici une petit partie du source, j'espère qu'en faisant le ménage je n'ai pas trop supprimer de truc
Ce bout de prog récupère les fichiers sur un serveur ftp du repertoire /RECEIPTS, les enregistre dans le répertoire C:\\RECEIPTS et met les fichiers à la même date & heure que sur le serveur ftp.
Tiens moi au courant si cela ne marche pas.
ab2oulem
Messages postés4Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention15 novembre 2006 15 nov. 2006 à 11:41
Salut,
Inquiétant ce que tu me dis là, car la dernière fois que je l'ai utilisé j'ai remonté 387 fichiers.
Il est vrai que la liste des fichiers que tu obtiens est celle des fichiers du répertoire que tu attaques
A tu donc + de 200 fichiers dans le repertoire ou tu te positionne avec la fonction changeWorkingDirectory
ou sont ils dans des sous répertoires ?
ab2oulem
Messages postés4Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention15 novembre 2006 15 nov. 2006 à 18:50
Salut,
Je viens de regarder les sources du package plus profondément et rien ne garantit que le file[i] ne soit pas null.
La fonction parseFTPEntry va traiter la ligne mais si elle n'arrive pas a faire ses correspondance elle va retournre null.
tu peux contourner cela en modifiant ton code ainsi
for(int i = 0; i< files.length;i++)
{
if (files[i] != null)
System.out.println(files[i].getName()+"\n");
}
A mon avis il serait interresant que tu pousses les investigations un peu plus loin pour savoir ce qui n'a pas pu être traiter
des fois que ton serveur ftp aurait des ratés. (A propos quel est le serveur FTP utilisé, la version et sur quel plateforme si c'est pas trop indiscret ?
)
Pour aller plus loin il faut que tu bidouilles la fonctions parseFTPEntry(String entry).
A la fin de celle ci tu remplaces return null; par return file;
comme cela le FTPFile ne sera pas null et tu pourras accéder aux lignes qui lui pose problèmes par la fonction
files[i].getRawListing().
En modifiant prog ainsi
for(int i = 0; i< files.length;i++)
{
if (files[i].getName()== null)
System.out.println(files[i].getRawListing());
}
il va te sortir tous les lignes qui n'a pas pu traiter.
Si t'as des problèmes pour modifier cette fonction,contact moi directement.
Je t'ai mis en dessous la partie du code incriminé tu verras que si la condition if (matches(entry)) n'est pas rempli elle va te retourner null.
public FTPFile parseFTPEntry(String entry)
{
FTPFile file = new FTPFile();
file.setRawListing(entry);
if (matches(entry))
{
String usr = group(14);
String grp = group(15);
String filesize = group(16);
String mo = group(17);
String da = group(18);
String yr = group(20);
String hr = group(21);
String min = group(22);
String name = group(23);
int pos = MONTHS.indexOf(mo);
int month = pos / 4;
if (yr != null)
{
// it's a year
cal.set(Calendar.YEAR,
Integer.parseInt(yr));
}
else
{
// it must be hour/minute or we wouldn't have matched
int year = cal.get(Calendar.YEAR);
// if the month we're reading is greater than now, it must
// be last year
if (cal.get(Calendar.MONTH) < month)
{
year--;
}
cal.set(Calendar.YEAR,
year);
cal.set(Calendar.HOUR_OF_DAY,
Integer.parseInt(hr));
cal.set(Calendar.MINUTE,
Integer.parseInt(min));
}
cal.set(Calendar.MONTH,
month);
cal.set(Calendar.DATE,
Integer.parseInt(da));
file.setTimestamp(cal);
}
catch (NumberFormatException e)
{
// do nothing, date will be uninitialized
}
file.setName(name);
return file;
}
return null; //à remplacer par un return file;
}
cs_stillfelil
Messages postés108Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention12 septembre 20093 15 nov. 2006 à 22:11
Salut Ab2oulem
C'est super sympa,
donc c'est l'exception qui a arretee le listage...
vrement bien vu
le code je ne peut pas le tester ici,je ne suis pas au bureau,et l'access au serveur ftp est limité par ip,
je le testerais samedi (weekend :jeudi,vendredi) quand je rentrerais au bureau
et je tienderais au couran (si tu permet bien sure),
en tout cas super merci pour ton aide, tu ma vrement aidé
a+