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

Java Discussion :

Java + Connexion Telnet + PB d'exécution


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut Java + Connexion Telnet + PB d'exécution
    Bonjour à tous,
    Espérant que je poste dans l'endroit adéquat .
    Je travaille sur un code de création et lancement d'une session telnet via un serveur de streming VLC.
    J'ai pas trouvé de solution pour mon problème que j'essaye de résoudre pendant presque 3 semaines .
    Donc j'ai fini par poster mon code, espérant que quelqu'un pourra me le fixer .
    Mon code est simple, un bout de code pour le lancement d'une commande vlc qui crée une session telnet avec un ensemble de paramètre (le syntaxe est précis dans le code). le bout de code suivant permet de se connecter à cette session déjà créé et ajouter un flux dedans.

    Le problème c'est que lorsque je lance mon code la création est faite mais la phase de connexion rend toujours des message d'erreur, mais lorsque j'ai divisé mon code dans deux main (un contient le bout de code de la création , l'autre contient le bout de code de la connexion et d'ajout de flux) et je lance le premier et puis le deuxième , ça marche !!!!!

    Donc j'ai finit par conclure qu'il s'agit d'un problème de temps ,le programme essaye de se connecter avant que les instructions de la création alloue déjà le port fixé dans la commande de création.Et ce qui est non logique !!!!

    j'ai essayé de mettre chacun dans un thread dont le premier met le premier en attente et puis il le lance met ça n'a pas marché .
    Je vous serez reconnaissante , aidez moi à résoudre le problème , j'ai tout essayer , j'ai bien fouillé sur le net mais j'ai pas réussi à rien fixé, pourquoi ça se passe .

    voilà mon code main
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package javaapplication6;
     
    import java.io.Console;
    import java.io.IOException;
    import java.net.SocketException;
    import java.util.Random;
    import java.util.Scanner;
    import java.lang.Process;
    import java.lang.Object;
    import java.util.Timer;
    /**
     *
     * @author bassouma
     */
    public class FirstMain {
     
        /**
         * @param args the command line arguments
         */
     
        public static void main(String[] args) throws SocketException, IOException, InterruptedException {
     
        try{
            Scanner sc =new Scanner(System.in);
     
     //____________Initialisation___________________________________________________
            String ClientIP = "0.0.0.0";
            int TelnetPort;
            String Password="azerty";
            int RTSPHost;
            String FilmFileName="The_Film";
            String FilePath="d:\\films\\Defiance\\Defiance.avi";
     
        /*  System.out.print("Entrer ClientIP:\n");
            ClientIP=sc.nextLine();
            System.out.print("Entrer Password:\n");
            Password=sc.nextLine();
     
            System.out.print("Entrer FilmFileName:\n");
            FilmFileName=sc.nextLine();
            System.out.print("Entrer FilePath:\n");
            FilePath=sc.nextLine();
    */
    //____________RTSPHostGenerate__________________________________________________
     
            System.out.print("Entrer RTSPHost:\n");
            RTSPHost=sc.nextInt();
      /*    int RTSPHost_int = 5500;
            Random RTSPHost_random = new Random();
            RTSPHost = (int) (RTSPHost_random.nextInt(500)+RTSPHost_int);
            System.out.print(RTSPHost+"\n");*/
     
    //____________TelentPortGenerate________________________________________________
     
            System.out.print("Entrer TelnetPort:\n");
            TelnetPort=sc.nextInt();
      /*    int TelnetPort_int=4200;
            Random TelnetPort_random = new Random();
            TelnetPort = (int) (TelnetPort_random.nextInt(500)+TelnetPort_int);
            System.out.println(TelnetPort+"\n");*/
     
    //___________StartNewInstance___________________________________________________
            String commande = "C:\\Program Files\\VideoLAN\\VLC\\vlc";
            String arguments = "--ttl 12 -vvv --color -I telnet --telnet-password "+Password+" --telnet-port "+TelnetPort+" --rtsp-host "+ClientIP+":"+RTSPHost;
            System.out.print(arguments);
           //________Commande definition _1rst méthode
            String[] cmd={
                           commande,
                           "--ttl",
                           "12",
                           "-vvv",
                           "--color",
                           "-I",
                           "telnet",
                           "--telnet-password",
                           Password,
                           "--telnet-port",
                           TelnetPort+"",
                           " --rtsp-host",
                           ClientIP,
                           ":",
                           RTSPHost+""
                         };
            //________Commande definition _2nd méthode
            String cmd1=commande+" "+arguments;
            Process p=null;
            Runtime r = Runtime.getRuntime();
            p = r.exec(cmd1);
            p.getOutputStream().close();
            p.getInputStream().close();
            p.destroy();
    //____________Connect___________________________________________________________
                try{
     
                TelnetConnection tc=new TelnetConnection("localhost",TelnetPort);
     
                String s = tc.Login(/*"",*/Password,100);
                System.out.println("\n this 's S : \n"+s);
     
                String prompt = s.trim();
                System.out.println(prompt.length());
                System.out.println(s.trim()+"\n");
                prompt = s.substring(prompt.length()-1,prompt.length());
     
                if (prompt.endsWith(">"))
                System.out.println("\n"+"Successss"+"\n");
     
                if (!prompt.equals("$") && !prompt.equals(">"))
                System.out.println("Connection failed"+"\n");
     
    //______________AddVOD__________________________________________________________
                String query = "new " + FilmFileName + " vod enabled";
                tc.WriteLine(query);
                query = "setup " + FilmFileName + " input '" + FilePath + "'";
                tc.WriteLine(query);
                System.out.println( "rtsp://localhost:"+RTSPHost+"/" + FilmFileName);
                query="show";
                tc.WriteLine(query);
                String y=tc.Read();
                System.out.println(y);
                }
     
               catch (Exception e){
                        System.out.println(e.getMessage());
                        System.out.println("voilà le stack");
                        e.printStackTrace();
                                  }
        }
     
        catch(Exception e){System.out.println("Catch my Main "+e.getMessage());}
        }
     
    }
    voilà la classe de la 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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package VOD_Package;
     
    import java.net.Socket;
    //import org.apache.commons.net.telnet.TelnetClient;
    //import java.util.Enumeration;
     
    /**
     *
     * @author bassouma
     */
     
     
    public class TelnetConnection
        {
            Socket tcpSocket;
     
            int TimeOutMs = 100;
     
     
    //______________________________________________________________________________
     
            public TelnetConnection(String Hostname, int Port)
            {
            try{
                tcpSocket = new Socket(Hostname, Port);
            }
            catch (Exception e) { System.out.println(e);}
            }
     
    //______________________________________________________________________________
     
            public String Login(String Username, String Password, int LoginTimeOutMs)
            {
                int oldTimeOutMs = TimeOutMs;
                TimeOutMs = LoginTimeOutMs;
                String s = Read();
     
                if (!s.trim().endsWith(":"))
                    System.out.println("Failed to connect : no login prompt");
                WriteLine(Username);
     
                s += Read();
                if (!s.trim().endsWith(":"))
                    System.out.println("Failed to connect : no password prompt");
                WriteLine(Password);
     
                s += Read();
                TimeOutMs = oldTimeOutMs;
                return s;
            }
    //______________________________________________________________________________
     
            public void WriteLine(String cmd)
            {
                Write(cmd + "\n");
            }
    //______________________________________________________________________________
     
            public void Write(String cmd)
            {
                try{
                if (!tcpSocket.isConnected()) return ;
                //byte[] buf = System.Text.ASCIIEncoding.ASCII.GetBytes(cmd.replace("\0xFF", "\0xFF\0xFF"));
                byte[] buf = cmd.replace("\0xFF", "\0xFF\0xFF").getBytes("ASCII");
                tcpSocket.getOutputStream().write(buf, 0, buf.length);
                }
                catch (Exception e){System.out.println(e);}
            }
     
    //______________________________________________________________________________
            public String Read()
            {
                try{
                if (!tcpSocket.isConnected()) return null;
                StringBuilder sb = new StringBuilder();
                do
                {
                    ParseTelnet(sb); 
                    Thread.sleep(TimeOutMs);
                } while (tcpSocket.getInputStream().available()> 0);
                return sb.toString();
                }
                    catch(Exception e){
                        return (e.toString());
                    }
            }
    //______________________________________________________________________________
     
            public Boolean  isConnected()
            {
                return tcpSocket.isConnected();
            }
    //______________________________________________________________________________
     
            void ParseTelnet(StringBuilder sb)
            {
                try{
     
                while (tcpSocket.getInputStream().available() > 0)
                {
                    int input = tcpSocket.getInputStream().read();
                    switch (input)
                    {
                        case -1:
                            break;
                        case Verbs.IAC:
                            // interpret as command
                            int inputverb = tcpSocket.getInputStream().read();
                            if (inputverb == -1) break;
                            switch (inputverb)
                            {
                                case (int)Verbs.IAC:
                                    //literal IAC = 255 escaped, so append char 255 to String
                                    sb.append(inputverb);
                                    break;
                                case (int)Verbs.DO:
                                case (int)Verbs.DONT:
                                case (int)Verbs.WILL:
                                case (int)Verbs.WONT:
                                    // reply to all commands with "WONT", unless it is SGA (suppres go ahead)
                                    int inputoption = tcpSocket.getInputStream().read();
     
                                    if (inputoption == -1) break;
                                    tcpSocket.getOutputStream().write((byte)Verbs.IAC);
     
                                    if (inputoption == (int)Options.SGA)
                                        tcpSocket.getOutputStream().write(inputverb == (int)Verbs.DO ? (byte)Verbs.WILL : (byte)Verbs.DO);
     
                                    else
                                        tcpSocket.getOutputStream().write(inputverb == (int)Verbs.DO ? (byte)Verbs.WONT : (byte)Verbs.DONT);
     
                                    tcpSocket.getOutputStream().write((byte)inputoption);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            sb.append((char)input);
                            break;
                    }
                }
     
            }
                catch (Exception e){ System.out.println(e)  ;}
     
     
            }
        }
    la classe telnet connexion utilise deux classe (énumération) qu'on peut les définir en deux classes séparés
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package javaapplication6;
     
    /**
     *
     * @author bassouma
     */
    public class Verbs {
            public final static int WILL=251;
            public final static int WONT=252;
            public final static int DO=253;
            public final static int DONT=254;
            public final static int IAC=255;
    }
    //______________________________________________
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package javaapplication6;
     
    /**
     *
     * @author bassouma
     */
    public class Options {
            public final static int SGA=3;
    }
    J'ai finit tout mes outils sincèrement, j'ai plus d'idée ou solution, merci d'avance pour m'aidez

  2. #2
    Membre confirmé

    Homme Profil pro
    Lycéen-Développeur Java autodidacte
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen-Développeur Java autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par pfe_smile Voir le message
    [...] mais lorsque j'ai divisé mon code dans deux main (un contient le bout de code de la création , l'autre contient le bout de code de la connexion et d'ajout de flux) et je lance le premier et puis le deuxième , ça marche !!!!! [...]
    Tiens tu m'as pas dit ça sur le chat !
    Dans ce cas pourquoi ne mettrais-tu pas le contenu de ces deux main() dans 2 méthodes (par exemple createConnection() et initializeConnection(), mon anglais est approximatif), que tu appellerais, dans l'ordre dans lequel cela marchait dans les mains séparés, dans la méthode main() ? (ou tout autre méthode appelante, voire dans un thread si ça te plaît, et en plus ça permet d'utiliser un sleep(XXX) entre les 2).

    Je ne vois pas pourquoi ça poserait un problème puisque les main séparés marchent.

    Bonne chance !!! (et bon stress, moins d'un mois je te rappelle )

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut
    j'ai testé ces appelles simples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     StartNewInstance SNI=new StartNewInstance(TelnetPort, Password, RTSPHost, ClientIP);
            Process  p = SNI.Start();
     
     
           if( p.getErrorStream()!=null)
           {
            TelnetConnection TC;
            TelnetClient TCL=new TelnetClient(TelnetPort, Password);
     
            TC = TCL.connection();
           }
    problème persiste !!!!!!!!!!

  4. #4
    Membre confirmé

    Homme Profil pro
    Lycéen-Développeur Java autodidacte
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen-Développeur Java autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    tu as mis Et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TC = TCL.getConnection();
    ça donne quoi ?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut
    pourquoi un getConnection(), la méthode dans la classe s'appelle connection() tout court.

  6. #6
    Membre confirmé

    Homme Profil pro
    Lycéen-Développeur Java autodidacte
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen-Développeur Java autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    une intuition
    ça coûte rien d'essayer, au pire si ça marche pas, ça te fait jamais que trois lettres à effacer ...

Discussions similaires

  1. Interagir sur un système linux avec une connexion telnet en JAVA
    Par grandthor dans le forum Général Java
    Réponses: 9
    Dernier message: 17/04/2009, 00h47
  2. Connexion telnet en java
    Par zeus2005 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 15/11/2007, 13h18
  3. Connexion TelNet avec FrameWork
    Par BenGlut dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 21/02/2006, 15h52
  4. Connexion Telnet et commande Shell
    Par Enano dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/11/2005, 08h23
  5. [postgreSQL ] [ java ] connexion
    Par bidules dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 22/05/2003, 18h51

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