Que renvoi la commande ftp LIST à mon BufferedReader ?

Que renvoi la commande ftp LIST à mon BufferedReader ? - Java - Programmation

Marsh Posté le 04-05-2003 à 14:14:34    

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:

Reply

Marsh Posté le 04-05-2003 à 14:14:34   

Reply

Marsh Posté le 04-05-2003 à 14:27:03    

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.
Reply

Marsh Posté le 04-05-2003 à 14:31:42    

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. }

Reply

Marsh Posté le 04-05-2003 à 14:45:59    

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

Reply

Marsh Posté le 04-05-2003 à 15:12:49    

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 ?

Reply

Marsh Posté le 04-05-2003 à 15:14:33    

:jap:  respect youdontcare...:jap:

Reply

Marsh Posté le 04-05-2003 à 15:21:33    

artemice a écrit :

:jap:  respect youdontcare...:jap:  


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

Reply

Marsh Posté le 04-05-2003 à 15:37:26    

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.

Reply

Marsh Posté le 05-05-2003 à 09:53:44    

[:drapo]


---------------
get amaroK plugin
Reply

Marsh Posté le 05-05-2003 à 13:18:51    

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 05-05-2003 à 13:18:51   

Reply

Marsh Posté le 05-05-2003 à 21:58:52    

the real moins moins a écrit :

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


 
cad ?

Reply

Marsh Posté le 05-05-2003 à 22:03:48    

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 ?

Reply

Marsh Posté le 05-05-2003 à 22:18:02    

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]

Reply

Marsh Posté le 05-05-2003 à 22:22:19    

Reply

Marsh Posté le 05-05-2003 à 22:48:51    


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

Reply

Marsh Posté le 18-05-2008 à 16:51:49    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed