Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1599 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Que renvoi la commande ftp LIST à mon BufferedReader ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Que renvoi la commande ftp LIST à mon BufferedReader ?

n°381697
EpoK
Let's burn
Posté le 04-05-2003 à 14:14:34  profilanswer
 

Voila j'essaie de faire un petit client ftp et je voudrai savoir comment traiter ce que me renvoi LIST dans mon BufferedReader
 
mici  :hello:

mood
Publicité
Posté le 04-05-2003 à 14:14:34  profilanswer
 

n°381702
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-05-2003 à 14:27:03  profilanswer
 

Ba t'as deux possibilités :
* soit tu te tapes la RFC sur FTP (Google est ton ami) ;
* soit tu fais un System.out.println() de ton BufferedReader [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°381703
EpoK
Let's burn
Posté le 04-05-2003 à 14:31:42  profilanswer
 

Taiche a écrit :

Ba t'as deux possibilités :
* soit tu te tapes la RFC sur FTP (Google est ton ami) ;
* soit tu fais un System.out.println() de ton BufferedReader [:spamafote]


 
bah le System.out.println() bloque :/ y se passe rien :
 

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import org.omg.CORBA.portable.UnknownException;
  7. class ConnectionFTP
  8. {
  9. BufferedReader inp;
  10. BufferedWriter out;
  11. Socket sock;
  12. public ConnectionFTP(String addr) throws UnknownException {
  13.  try{
  14.   sock = new Socket (addr, 21);
  15.   out = new BufferedWriter (new OutputStreamWriter(sock.getOutputStream ())) ;
  16.   inp = new BufferedReader (new InputStreamReader(sock.getInputStream ())) ;
  17.   //System.out.println("Connection Etablie ..." );
  18.  }
  19.  catch(UnknownHostException e){
  20.   e.printStackTrace();
  21.  }
  22.  catch(IOException e) {
  23.   e.printStackTrace(); 
  24.  }
  25. }
  26. public void cmd(String command) {
  27.  try{
  28.   out.flush();
  29.   out.write(command+"\r\n" );
  30.   //System.out.println(command);
  31.  }
  32.  catch(IOException e) {
  33.   e.printStackTrace(); 
  34.  }
  35. }
  36. public String rep() {
  37.  String reponse=null;
  38.  try{
  39.   reponse = inp.readLine()+"\r\n";
  40.          System.out.println(reponse);
  41.  }
  42.  catch(IOException e) {
  43.   e.printStackTrace(); 
  44.  }
  45.  return reponse;
  46. }
  47. }
  48. class ClientFTP
  49. {
  50. public static void main(String[] args) {
  51.  ConnectionFTP cftp = new ConnectionFTP(args[0]);
  52.  cftp.rep(); // Bonjour
  53.  cftp.cmd("USER ral" );
  54.  cftp.cmd("PASS bop" );
  55.  System.out.println("USER ral" );
  56.  cftp.rep(); // pass required
  57.  System.out.println("PASS bop" );
  58.  cftp.cmd("SYST" );
  59.  cftp.rep(); // user login in
  60.  cftp.cmd("PWD" );
  61.  System.out.println("SYST" );
  62.  cftp.rep(); // syst
  63.  System.out.println("PWD" );
  64.  cftp.cmd("TYPE A" );
  65.  cftp.rep(); // pwd
  66.  cftp.cmd("PASV" );
  67.  cftp.cmd("LIST" );
  68.  System.out.println("TYPE A" );
  69.  cftp.rep(); // type A
  70.  System.out.println("PASV" );
  71.  cftp.rep(); // pasiv mode
  72.  System.out.println("LIST" );
  73.  cftp.cmd("LIST" );
  74.  cftp.rep();
  75. }
  76. }

n°381709
youdontcar​e
Posté le 04-05-2003 à 14:45:59  profilanswer
 

Tu dois utiliser deux sockets pour communiquer avec un serveur ftp : une pour envoyer les commandes & recevoir leurs résultats, une pour envoyer & recevoir les données. La commande de list est envoyée sur la première, les données réceptionnées sur la seconde.
 
Ensuite, il y a deux modes de connection : actif (PORT) ou passif (PASV). Avec PORT, tu créés une socket & un port de connexion sur ton ordi (PORT tonip tonport), avec PASV le serveur créé une socket sur laquelle tu te connectes (Entering passive mode, sonip sonport).
 
Donc là il bloque car il sait pas trop où envoyer les données ... :D

n°381723
EpoK
Let's burn
Posté le 04-05-2003 à 15:12:49  profilanswer
 

youdontcare a écrit :

Tu dois utiliser deux sockets pour communiquer avec un serveur ftp : une pour envoyer les commandes & recevoir leurs résultats, une pour envoyer & recevoir les données. La commande de list est envoyée sur la première, les données réceptionnées sur la seconde.
 
Ensuite, il y a deux modes de connection : actif (PORT) ou passif (PASV). Avec PORT, tu créés une socket & un port de connexion sur ton ordi (PORT tonip tonport), avec PASV le serveur créé une socket sur laquelle tu te connectes (Entering passive mode, sonip sonport).
 
Donc là il bloque car il sait pas trop où envoyer les données ... :D


 
Tu dois utiliser deux sockets pour communiquer avec un serveur ftp : une pour envoyer les commandes & recevoir leurs résultats, une pour envoyer & recevoir les données. La commande de list est envoyée sur la première, les données réceptionnées sur la seconde.
 
elle ressemble a quoi l'instantiation ?

n°381726
artemice
( - ;
Posté le 04-05-2003 à 15:14:33  profilanswer
 

:jap:  respect youdontcare...:jap:

n°381730
EpoK
Let's burn
Posté le 04-05-2003 à 15:21:33  profilanswer
 

artemice a écrit :

:jap:  respect youdontcare...:jap:  


 
kler  [:volta]  :)
 
tu peu me donné plus d'info vu que t'a l'air de maitriser :)

n°381741
youdontcar​e
Posté le 04-05-2003 à 15:37:26  profilanswer
 

EpoK a écrit :

vu que t'a l'air de maitriser :)

J'ai surtout buté sur exactement la même chose. Mais je fais du c++, donc l'instantiation en java, aucune idée. Je n'ai fait que du PORT, ça donnait :  
 
* choppage de l'ip courante, récupération d'un port libre
* création d'une socket avec l'ip & le port en mode listen
* envoi de PORT
* envoie de LIST
* accepter la connection (accept()) qui renvoie une socket sur laquelle les données sont envoyées
 
En passif, tu dois sûrement créer une socket en listen vers l'ip & le port que te file le serveur. De toutes façons, tu ne couperas pas à la lecture du RFC & de la lib socket.

n°382332
bobuse
Posté le 05-05-2003 à 09:53:44  profilanswer
 

[:drapo]


---------------
get amaroK plugin
n°382574
the real m​oins moins
Posté le 05-05-2003 à 13:18:51  profilanswer
 

bon sinon y'a tjs netcomponents qui marche bien hein :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 05-05-2003 à 13:18:51  profilanswer
 

n°383434
EpoK
Let's burn
Posté le 05-05-2003 à 21:58:52  profilanswer
 

the real moins moins a écrit :

bon sinon y'a tjs netcomponents qui marche bien hein :o


 
cad ?

n°383437
EpoK
Let's burn
Posté le 05-05-2003 à 22:03:48  profilanswer
 

youdontcare a écrit :

J'ai surtout buté sur exactement la même chose. Mais je fais du c++, donc l'instantiation en java, aucune idée. Je n'ai fait que du PORT, ça donnait :  
 
* choppage de l'ip courante, récupération d'un port libre
* création d'une socket avec l'ip & le port en mode listen
* envoi de PORT
* envoie de LIST
* accepter la connection (accept()) qui renvoie une socket sur laquelle les données sont envoyées
 
En passif, tu dois sûrement créer une socket en listen vers l'ip & le port que te file le serveur. De toutes façons, tu ne couperas pas à la lecture du RFC & de la lib socket.


 
le port y marche comment ?
fau lui donner quoi en parametre ?

n°383443
EpoK
Let's burn
Posté le 05-05-2003 à 22:18:02  profilanswer
 

En passif, tu dois sûrement créer une socket en listen vers l'ip & le port que te file le serveur. De toutes façons, tu ne couperas pas à la lecture du RFC & de la lib socket.
 
 
comment je récup le port que me donen le pasiv mod ?
 
"la lecture du RFC & de la lib socket."
 
a comprend pas :)  [:virginie]

n°383445
the real m​oins moins
Posté le 05-05-2003 à 22:22:19  profilanswer
 
n°383467
EpoK
Let's burn
Posté le 05-05-2003 à 22:48:51  profilanswer
 


 
hum hum ca a l'air vraiment puissant :)
 
je look thx !

n°1733355
DidUngar
Posté le 18-05-2008 à 16:51:49  profilanswer
 

Comme j'avez le même probléme mais que j'été moin loing, j'ai commencer a travailler ton code,
voila ou j'en suis :

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import org.omg.CORBA.portable.UnknownException;
  4. import java.lang.StringBuilder;
  5. class FTP {
  6. private BufferedReader inp;
  7. private BufferedWriter out;
  8. private Socket sock;
  9. private boolean passiveMode = false;
  10. InputStream pass;
  11. private String dir = "";
  12. public String getDirActuel(){
  13.  if ( dir.equals("" ) )
  14.   pwd();
  15.  return dir;
  16. }
  17. private static boolean echo = false;
  18. public void printCommand(boolean b){echo = b;};
  19. public FTP(String addr) throws UnknownException {
  20.  try {
  21.   sock = new Socket(addr, 21);
  22.   out = new BufferedWriter(new OutputStreamWriter(sock
  23.     .getOutputStream()));
  24.   inp = new BufferedReader(new InputStreamReader(sock
  25.     .getInputStream()));
  26.  } catch (UnknownHostException e) {
  27.   e.printStackTrace();
  28.  } catch (IOException e) {
  29.   e.printStackTrace();
  30.  }
  31. }
  32. public void cmd(String command) {
  33.  try {
  34.   out.write(command + "\r\n" );
  35.   out.flush();
  36.   if (echo)
  37.    System.out.println("FTP --> " + command);
  38.  } catch (IOException e) {
  39.   e.printStackTrace();
  40.  }
  41. }
  42. public String rep() {
  43.  String reponse = null;
  44.  try {
  45.   reponse = inp.readLine();
  46.   out.flush();
  47.   if (echo)
  48.    System.out.println("FTP <-- " + reponse);
  49.  } catch (IOException e) {
  50.   e.printStackTrace();
  51.  }
  52.  return reponse;
  53. }
  54. /**
  55.  * connect ==> permet d'ouvrir une connection sur le serveur
  56.  * @param user
  57.  * @param pass
  58.  * @return
  59.  */
  60. public boolean connect(String user, String pass) {
  61.  cmd("USER " + user);
  62.  if (rep().indexOf("331" ) < 0)
  63.   return false;
  64.  cmd("PASS " + pass);
  65.  if (rep().indexOf("230" ) < 0)
  66.   return false;
  67.  return true;
  68. }
  69. /**
  70.  * cwd ==> Permet de changer de répertoire
  71.  * @return
  72.  */
  73. public boolean cwd(String path){
  74.  // Commande :
  75.  cmd("CWD "+path);
  76.  // Réponce
  77.  if ( rep().indexOf("250" )>=0 ){
  78.   dir = "";
  79.   return true;
  80.  }else
  81.   return false;
  82. }
  83. /**
  84.  * help ==> permet de connaitre la liste des fonction implementer par le serveur
  85.  * @return
  86.  */
  87. public String help() {
  88.  // Variables :
  89.  StringBuilder txt = new StringBuilder("" );
  90.  String temp = "";
  91.  // Commande :
  92.  cmd("HELP" );
  93.  // Analayse de la réponce
  94.  temp = rep();
  95.  txt.append(temp);
  96.  // On extrait les informations :
  97.  if (temp.indexOf("214" ) >= 0) {
  98.   do {
  99.    temp = rep();
  100.    txt.append("\r\n" + temp);
  101.   } while (temp.indexOf("214" ) < 0);
  102.  }
  103.  // On renvoye les informations :
  104.  return txt.toString();
  105. }
  106. /**
  107.  * mkd ==> Permet crée un répertoire
  108.  * @return
  109.  */
  110. public boolean mkd(String path){
  111.  // Commande :
  112.  cmd("MKD "+path);
  113.  // Réponce
  114.  return ( rep().indexOf("257" )>=0 );
  115. }
  116. /**
  117.  * pwd ==> permet de conserver la session
  118.  * @return
  119.  */
  120. public String noop(){
  121.  // Commande :
  122.  cmd("NOOP" );
  123.  // Réponce
  124.  return rep();
  125. }
  126. /**
  127.  * pasv ==> permet de rentré en mode passif
  128.  * @return
  129.  */
  130. public String pasv(){
  131.  // Variable
  132.  String rep ="";
  133.  String temp = "";
  134.  String part[];
  135.  String ip="";
  136.  int port = 0;
  137.  // Commande :
  138.  cmd("PASV" );
  139.  // Réponce
  140.  rep = rep();
  141.  // Analyse de la réponce
  142.  if ( rep.indexOf("227" )>=0 ){
  143.   temp = rep.replaceAll("227.*[(](.*)[)].*", "$1" );
  144.   part = temp.split("," );
  145.   ip = part[0]+"."+part[1]+"."+part[2]+"."+part[3];
  146.   port = Integer.valueOf(part[4])*256 + Integer.valueOf(part[5]);
  147.   System.out.println( ip+" : "+port);
  148.   // Ouverture de la connection passive :
  149.   try{
  150.    sock = new Socket(ip,port);
  151.    pass = sock.getInputStream();
  152.   } catch (UnknownHostException e) {
  153.    e.printStackTrace();
  154.   } catch (IOException e) {
  155.    e.printStackTrace();
  156.   }
  157.  }
  158.  return rep;
  159. }
  160. /**
  161.  * pwd ==> permet de connaitre le repertoire actuel
  162.  * @return
  163.  */
  164. public String pwd(){
  165.  // Variable
  166.  String rep ="";
  167.  // Commande :
  168.  cmd("PWD" );
  169.  // Réponce
  170.  rep = rep();
  171.  if ( rep.indexOf("257" )>=0 ){
  172.   dir = rep.replaceAll("257.*\"(.*)\" is the current directory", "$1" );
  173.  }
  174.  return rep;
  175. }
  176. /**
  177.  * stat ==> Permet de connaitre le status du serveur
  178.  * @return
  179.  */
  180. public String stat(){
  181.  // Variables :
  182.  StringBuilder txt = new StringBuilder("" );
  183.  String temp = "";
  184.  // Commande :
  185.  cmd("STAT" );
  186.  // Analayse de la réponce
  187.  temp = rep();
  188.  txt.append(temp);
  189.  // On extrait les informations :
  190.  if (temp.indexOf("211" ) >= 0) {
  191.   do {
  192.    temp = rep();
  193.    txt.append("\r\n" + temp);
  194.   } while (temp.indexOf("211" ) < 0);
  195.  }
  196.  // On renvoye les informations :
  197.  return txt.toString();
  198. }
  199. /**
  200.  * syst ==> Permet de connaitre le systéme d'exploitation du serveur
  201.  * @return
  202.  */
  203. public String syst(){
  204.  // Commande :
  205.  cmd("SYST" );
  206.  // Réponce
  207.  return rep();
  208. }
  209. /**
  210.  * syst ==> Permet de connaitre le systéme d'exploitation du serveur
  211.  * @return
  212.  */
  213. public String type(String type){
  214.  // Commande :
  215.  cmd("TYPE "+type);
  216.  // Réponce
  217.  return rep();
  218. }
  219. /** Testeur **/
  220. public static void main(String[] args) {
  221.  FTP ftp = new FTP("******************" );
  222.  ftp.rep();
  223.  ftp.connect("*******", "************" );
  224. //  System.out.println(ftp.syst());
  225. //  System.out.println(ftp.pwd());
  226.  ftp.type("A" );// Text ( i binnaire )
  227. //  ftp.cwd("./testFTP" );
  228.  // System.out.println(cftp.help());
  229.  // cftp.cmd("LIST -al" );
  230.  ftp.printCommand(true);
  231.  ftp.getDirActuel();
  232. //  ftp.mkd("test/test" );
  233.  System.out.println();
  234.  ftp.pasv();
  235.   System.out.println( ftp.pass );
  236. System.out.println();
  237. //  ftp.cmd("NLST ./" );
  238.  ftp.rep();
  239.  ftp.rep();
  240.  ftp.rep();
  241.  ftp.rep();
  242.  ftp.rep();
  243.  ftp.rep();
  244.  ftp.rep();
  245.  ftp.rep();
  246. }
  247. }


 
Comme tu peux le voir , je crée la 2eme socket, pour le mode passive.
Mais je ne sais pas l'ecouter , voir l'utiliser...
 
Bien que la connection sur le serveur fonctionne.


Message édité par DidUngar le 18-05-2008 à 16:55:48

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Que renvoi la commande ftp LIST à mon BufferedReader ?

 

Sujets relatifs
[PERL] executer une commande (facile)... [resolu]Executer une commande en JAVA
lire un caractere de commande en CCommande DOS pour afficher les services NT
Meilleur system de mailing list ?recherche d'un algourithme d'un interpreteur de commande
lancer une commande avec une variable comme paramètreStopper un programme lancé en ligne de commande ?
commande `ls`commande winzip
Plus de sujets relatifs à : Que renvoi la commande ftp LIST à mon BufferedReader ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR