IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

Besoin d'avis sur mon thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2006
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Besoin d'avis sur mon thread
    Bonjour,

    J'ai fait une application j2ee avec servlet jsp etc...
    Dans cette application, lorsque je clique sur un bouton, je dois faire une connexion telnet, lancer une commande unix, récupérer le résultat... tout ça se faisant en meme temps que d'afficher une autre page jsp.
    J'ai donc mis ma classe me permettant de me connecter en telnet en "extends Thread".
    Je clique sur mon bouton : tout se passe normalement mais etant donné que ma commande unix est (pour le moment) rapide, je n'arrive pas à savoir si elle s'effectue en meme temps que l'affichage de ma page jsp.

    Je vous mets le code de ma classe de connexion telnet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    import java.io.*;
    import org.apache.commons.net.telnet.TelnetClient;
     
    public class AccesTelnet extends Thread {
    	  private TelnetClient telnet = new TelnetClient();
    	  private InputStream in;
    	  private PrintStream out;
    	  private char prompt = '>';
    	  private String stdout;
    	  private String coderetour;
     
    	  public AccesTelnet( String server, String user, String password ) {
    	   try {
    		 // Connect to the specified server
    		 telnet.connect( server, 23 );
    		 // Get input and output stream references
    		 in = telnet.getInputStream();
    		 out = new PrintStream( telnet.getOutputStream() );
                     // Log the user on
    		 readUntil( "login: " );
    		 write( user );
    		 readUntil( "Password: " );
    		 write( password );
    		 // Advance to a prompt
    		 readUntil( prompt + "" );
    	   }
    	   catch( Exception e ) {
    		 e.printStackTrace();
    	   }
    	  }
     
    	public String getCoderetour() {
    			return coderetour;
    	}
     
    	public void setCoderetour(String coderetour) {
    			this.coderetour = coderetour;
    	}
     
    	public String getStdout() {
    			return stdout;
    	}
     
    	public void setStdout(String stdout) {
    			this.stdout = stdout;
    	}
     
    	public String readUntil( String pattern ) {
    	   try {
    		 char lastChar = pattern.charAt( pattern.length() - 1 );
    		 StringBuffer sb = new StringBuffer();
    		 boolean found = false;
    		 char ch = ( char )in.read();
    		 while( true ) {
    		  System.out.print( ch );
    		  sb.append( ch );
    		  if( ch == lastChar ) {
    		    if( sb.toString().endsWith( pattern ) ) {
    			 return sb.toString();
    		    }
    		  }
    		  ch = ( char )in.read();
    		 }
    	   }
    	   catch( Exception e ) {
    		 e.printStackTrace();
    	   }
    	   return null;
    	  }
     
    	  public void write( String value ) {
    	   try {
    		 out.println( value );
    		 out.flush();
    		 System.out.println( value );
    	   }
    	   catch( Exception e ) {
    		 e.printStackTrace();
    	   }
    	  }
     
    	  public String sendCommand( String command ) {
    	   try {
    		 write( command );
    		 return readUntil( prompt + "" );
    	   }
    	   catch( Exception e ) {
    		 e.printStackTrace();
    	   }
    	   return null;
    	  }
     
    	  public void disconnect() {
    	   try {
    		 telnet.disconnect();
    	   }
    	   catch( Exception e ) {
    		 e.printStackTrace();
    	   }
    	  }
     
    	  public void run() {
    		try{
    			stdout = this.sendCommand("ls");
    			coderetour = this.sendCommand("echo $?");
    			System.out.println("affichage : "+stdout+" ; code retour = "+coderetour);
    			this.disconnect();
    		}
    		catch (Exception e){
     
    		}
    	  }
    	}
    et le code d'appel de cette classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public void lanceAudit(Connection connexion, String requete, String env, String projet, String type, String grp, String sgrp, String date) {
    		AccesTelnet at = new AccesTelnet("47.123.56.8","login","mdp");
    		at.start();
    		try{
    			at.join(5);
    			String coderetour = at.getCoderetour();
    			String stdout = at.getStdout();
    			System.out.println(stdout);
    			System.out.println(coderetour);
    		}
    		catch (Exception e){
     
    		}
    	}
    Donc j'aimerais savoir si d'après vous ça fonctionne bien comme il faut ou pas (j'avoue que j'ai eu du mal à bien assimiler les threads).

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mai 2006
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Bon en attendant des réponses j'ai fait un petit test que je pense concluant bien que je connaisse pas très bien les threads.
    J'ai lancé ma commande ls et ensuite j'ai fait un sleep() et un affichage afin de faire durer la commande.
    Je me rend compte que ma nouvelle page s'affiche 2 s avant l'affichage, donc je suppose que les 2 activités sont en parallèle.

    Bien que je pense que ce thread fonctionne, j'aimerais quand meme des avis d'experts sur le code afin que celui ci soit correct.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'avis sur mon CV et ma lettre de motivation
    Par houpe_loic dans le forum CV
    Réponses: 1
    Dernier message: 05/10/2014, 20h29
  2. Réponses: 9
    Dernier message: 05/04/2010, 22h12
  3. Besoin d'avis sur mon rapport hijackthis
    Par gkhan dans le forum Sécurité
    Réponses: 16
    Dernier message: 29/05/2008, 19h57
  4. Besoin d'avis sur mon formulaire
    Par Olivier Regnier dans le forum Web
    Réponses: 2
    Dernier message: 16/11/2007, 09h46
  5. Réponses: 6
    Dernier message: 13/09/2007, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo