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

Entrée/Sortie Java Discussion :

Redémarrer un serveur


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de NutellaPiou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 107
    Par défaut Redémarrer un serveur
    Salut à tous,

    J'ai développé une application client/Serveur. J'utilise un socket TCP. Depuis le début, je lance le serveur à partir de Netbeans. J'ai essayé de le lancer en console mais j'ai qqes soucis.

    La première chose c'est que quand je fais :

    La main n'est pas rendue à l'utilisateur. Je sais que sous Linux il suffit d'ajouter un & pour lancer l'applic en tache de fond. Pour windows j'ai trouvé la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start java -jar monAppli.jar
    Bon c'est pas terrible, ça lance dans une nouvelle cmd mon application. Mais je récupère la main sur ma cmd principale. Soit c'est pas bien grave pcq mon appli tournera sous Linux. C'était juste pour faire des tests.

    Ensuite, et c'est ça qui me pose problème, c'est comment relancer le serveur? J'explique :

    Je lance la première fois mon serveur via la commande citée plus haut. Puis, pour redémarrer le serveur je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar monAppli.jar -R
    Comment est-ce que je peux faire pour relancer le serveur à partir de cette commande? J'ai fait ça pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(args.length > 0)
    {
        if(args[0].equalsIgnoreCase("-r"))
        {
            System.out.println("on passe");
            System.out.println("Server restarted");
         }
    }
    else
    {
         //Traitements
    }
    Dans le if, je dois tuer l'ancien processus du serveur et relancer une nouvelle instance de celui-ci.

    Je sais vraiment pas comment faire Est-ce que quelqu'un pourrait m'aider, ou me donner une piste?

    Merci d'avance

    < Nutella >

    PS : je n'arrive pas à accéder aux tutos de developpez.net, le proxy au boulot à été updated et les tutos ne passent plus Donc déso si la solution se trouve dans un de ces tutos.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par NutellaPiou Voir le message
    La main n'est pas rendue à l'utilisateur. Je sais que sous Linux il suffit d'ajouter un & pour lancer l'applic en tache de fond. Pour windows j'ai trouvé la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start java -jar monAppli.jar
    Sous Windows il faudrait plutôt utilisé javaw :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javaw -jar monAppli.jar
    Windows fait la distinction entre application console (qui sera TOUJOURS lié à une console type MS-Dos) et les applications graphiques (qui n'auront JAMAIS de console).

    • java est la version console
    • javaw est la version "graphique"




    Citation Envoyé par NutellaPiou Voir le message
    Ensuite, et c'est ça qui me pose problème, c'est comment relancer le serveur? J'explique :

    Je lance la première fois mon serveur via la commande citée plus haut. Puis, pour redémarrer le serveur je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar monAppli.jar -R
    Comment est-ce que je peux faire pour relancer le serveur à partir de cette commande?
    Le mieux serait d'envoyer à ton serveur un ordre d'arrêt via le port TCP...
    Non ?

    a++

  3. #3
    Membre confirmé Avatar de NutellaPiou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 107
    Par défaut
    Merci pour ta réponse.

    Je me suis peut-être mal exprimé.

    Ma classe serveur est :

    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
    public class Server
    {
    public static void main(String[] args)
    {
       if(args.length > 0)
       {
          if(args[0].equalsIgnoreCase("-r"))
          {
              System.out.println("on passe");
              //POINT A
              System.out.println("Server restarted");
           }
       }
    else
    {
       //traitements
     
       try
       {
                        ServerSocket server = new ServerSocket(port);           
                        System.out.println("Server started");
     
                        while(true) //Wait for clients connection
                        {
                            Socket connexion = server.accept();
                            new ServerThreadConnection().start(); //Loads the threads for a specified client.
                        }
                    }
                    catch (IOException ex)
                    {
                        System.out.println("IOException " + ex);
                    }
    }
    Au POINT A, j'aimerai faire un truc du genre CTRL+C et relancer la commande javaw -jar monappli.

    Ma classe Server étant le main, j'aimerai la relancer totallement. Il y a peut-être confusion dans les noms. Je veux relancer entièrement le main. Pcq les //traitements dans le else doivent être refait.

    J'espère avoir été plus précis.

    J'ai une idée : faudrait connaitre l'id du process javaw. Le kill et relancer la commande.

    Je vais faire mes recherches.

    Merci adiGuba

  4. #4
    Membre confirmé Avatar de NutellaPiou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 107
    Par défaut
    J'ai repris ton idée.

    Classe Server :
    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
      if(args.length > 0)
                {
                    if(args[1].equalsIgnoreCase("-r"))
                    {
                        try
                        {
                            Socket stop = new Socket(ip, port);
                            ObjectOutputStream out = new ObjectOutputStream(stop.getOutputStream());
                            out.writeObject("stop");
                            out.close();
                            stop.close();
                            System.out.println("Server restarted");
                        }
                        catch (UnknownHostException ex)
                        {
                            System.err.println("Unknow host " + ex);
                        }
                        catch (IOException ex)
                        {
                            System.err.println("IO exception " + ex);
                        }
                    }
                }

    Dans la classe ServerThreadConnection (ligne c'est le message que je reçois):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    if(ligne.contains("stop"))
                    {
                        System.exit(0);
                    }
    Par contre je n'arrive pas à voir si je que je fais est correct et si ça fonctionne

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par NutellaPiou Voir le message
    Par contre je n'arrive pas à voir si je que je fais est correct et si ça fonctionne

    Ca veut dire quoi ? Que tu ne comprends pas ce que tu fais ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé Avatar de NutellaPiou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 107
    Par défaut
    Héhéhéhé

    En fait si j'avais compris mais il ne se passait rien

    Mon erreur venait de args[1] ! C'est args[0] qu'il faut mettre NOOB!

    Now le serveur s'arrête, le deuxième se lance mais j'ai un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Server restarted
    IOException java.net.BindException: Address already in use: JVM_Bind
    Le premier serveur est arrêté mais le port n'est pas libéré de suite. je dois attendre qqes secondes avant de recréer le socket sur le même port.

    Je replonge dans mon code

Discussions similaires

  1. [debutant] connexion ssh pour redémarrer un serveur
    Par san1981 dans le forum Réseau
    Réponses: 6
    Dernier message: 12/09/2008, 18h17
  2. Réponses: 3
    Dernier message: 29/08/2007, 09h11
  3. Réponses: 1
    Dernier message: 17/04/2007, 16h51
  4. [UBUNTU] Impossible de redémarrer le serveur Tomcat
    Par hiko-seijuro dans le forum Ubuntu
    Réponses: 4
    Dernier message: 25/02/2007, 18h10

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