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 :
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 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();
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
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); }
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.
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); } } }
Merci
Partager