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

Langage Java Discussion :

Stopper un script (Programme client/serveur en RPC)


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Stopper un script (Programme client/serveur en RPC)
    Bonjour, j'ai généré un programme Client/Serveur avec l'outil jrpcgen.jar en java. Ca permet d'envoyer des données en XDR.

    Le serveur met un port en écoute, et le client appelle des procédures distantes. Tout marche bien.

    Mais l'execution du serveur ne s'arrète pas

    Le client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
             metricwanClient unClient = new metricwanClient(adrIP,8888,OncRpcProtocols.ONCRPC_TCP);
     
                 for(int j = 0; j < uneTableDistante.arrayMetric.size(); j++) {
                     metricdef uneMetricDef = new metricdef(uneTableDistante.arrayMetric.get(j).getId(),uneTableDistante.arrayMetric.get(j).getType(),uneTableDistante.arrayMetric.get(j).getName(),uneTableDistante.arrayMetric.get(j).getVal(),uneTableDistante.arrayMetric.get(j).getUnits(),uneTableDistante.arrayMetric.get(j).getSlope(),uneTableDistante.arrayMetric.get(j).getTmax(),uneTableDistante.arrayMetric.get(j).getDmax(),uneTableDistante.arrayMetric.get(j).getUnHostCle().getName(),uneTableDistante.arrayMetric.get(j).getUnClusterCle().getName());
     
                     metricval uneMetricVal = new metricval(uneTableDistante.arrayMetric.get(j).getId(),uneTableDistante.arrayMetric.get(j).getVal());
     
                     boolean existeMetricDef = unClient.DEFINE_METRIC_1(uneMetricDef);
     
                     if (existeMetricDef == true) {
                        unClient.SEND_METRIC_1(uneMetricVal);
                     }
                 }
             unClient.close();
    Le Stub Serveur (Code généré)

    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
    public abstract class metricwanServerStub extends OncRpcServerStub implements OncRpcDispatchable {
     
        public metricwanServerStub()
               throws OncRpcException, IOException {
            this(0);
        }
     
        public metricwanServerStub(int port)
               throws OncRpcException, IOException {
            this(null, port);
        }
     
        public metricwanServerStub(InetAddress bindAddr, int port)
               throws OncRpcException, IOException {
            info = new OncRpcServerTransportRegistrationInfo [] {
                new OncRpcServerTransportRegistrationInfo(metricwan.METRICRPC, 1),
            };
            transports = new OncRpcServerTransport [] {
                new OncRpcUdpServerTransport(this, bindAddr, port, info, 32768),
                new OncRpcTcpServerTransport(this, bindAddr, port, info, 32768)
            };
        }
     
        public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
               throws OncRpcException, IOException {
            if ( version == 1 ) {
                switch ( procedure ) {
                case 0: {
                    call.retrieveCall(XdrVoid.XDR_VOID);
                    METRIC_NULL_1();
                    call.reply(XdrVoid.XDR_VOID);
                    break;
                }
                case 1: {
                    metricdef args$ = new metricdef();
                    call.retrieveCall(args$);
                    XdrBoolean result$ = new XdrBoolean(DEFINE_METRIC_1(args$));
                    call.reply(result$);
                    break;
                }
                case 2: {
                    metricval args$ = new metricval();
                    call.retrieveCall(args$);
                    SEND_METRIC_1(args$);
                    call.reply(XdrVoid.XDR_VOID);
                    break;
                }
                default:
                    call.failProcedureUnavailable();
                }
            } else {
                call.failProgramUnavailable();
            }
        }
     
        public abstract void METRIC_NULL_1();
     
        public abstract boolean DEFINE_METRIC_1(metricdef arg1);
     
        public abstract void SEND_METRIC_1(metricval arg1);
     
    }
    Et enfin le serveur que j'execute :

    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
    public class ServerMetricwan extends metricwanServerStub {
     
     
        public ServerMetricwan() throws OncRpcException, IOException {
            super(8888);
        }
     
        public void stopServerMetricwan() {
            super.close(transports);
        }
     
        public static void main (String args[]) {
     
            try {
                ServerMetricwan srv = new ServerMetricwan();
                srv.run();
                srv.stopServerMetricwan();
                }
            catch (Exception e) {
                System.out.println("Exception : "+e);
                }
        }
    }
    Je ne sais pas si la méthode stopServerMetricwan est juste. J'ai mis des print après la ligne srv.run(); mais ils ne s'affichent pas. Je ne sais pas comment arreter le script ServerMetricwan.

    Merci

  2. #2
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    En fait tu as un script qui tourne en continue, et tu veux pouvoir le stopper quand bon te semble ?

    Si tel est le cas, Je dirais qu'il faut soit un Listener sur un évènement particulier que tu provoquerais pour arrêter ton script, soit un thread sur lequelle tu as la main et qui aura la capacité à faire stopper le thread contenant le script...

    Ce sont des idées...

Discussions similaires

  1. Aide sur un programme Client Serveur
    Par clubmed01 dans le forum Linux
    Réponses: 33
    Dernier message: 29/05/2012, 10h22
  2. programme client serveur mode TCP/UDP en java
    Par ouss01 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 03/04/2009, 09h05
  3. Exemples de programmes client/serveur
    Par anakronox dans le forum Réseau
    Réponses: 11
    Dernier message: 02/12/2008, 14h27
  4. build.xml pour un programme client serveur
    Par donyas dans le forum ANT
    Réponses: 5
    Dernier message: 22/12/2006, 23h49
  5. architecture d'un programme client/serveur asynchrone (win)
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 05/09/2003, 23h59

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