[JavaCard][RMI] Utilisation d'un tutorial
Bonjour,
J'ai beaucoup de mal à comprendre comment compiler et simuler l'exemple du PurseApplet http://www.cs.ru.nl/~tews/jcdocs/app....2/rmiapp.html
Voici ce que j'ai fait:
J'ai saisi le code de l'applet, de l'interface et de l'implémentation des méthodes de l'interface (jusque là, c'est de la copie)
Je lance cref => ok
J'installe l'applet dans le simulateur (création) => ok
Je sélectionne l'applet dans le simulateur => ok
Le problème vient du lancement du client:
Code:
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
| package myPackage;
import javacard.framework.UserException;
import com.sun.javacard.clientlib.ApduIOCardAccessor;
import com.sun.javacard.clientlib.CardAccessor;
import com.sun.javacard.rmiclientlib.JCRMIConnect;
public class PurseClient extends java.lang.Object {
public static void main(String[] argv) {
// arg[0] contains the debit amount
short debitAmount = (short) Integer.parseInt("15") ;
CardAccessor ca = null;
System.out.println("débit");
try {
// open and powerup the card
System.out.println("0");
ca = new ApduIOCardAccessor();
System.out.println("a");
// create an RMI connector instance for the Java Card
JCRMIConnect jcRMI = new JCRMIConnect(ca);
System.out.println("b");
byte[] appAID = new byte[] {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x00};
System.out.println("1");
// select the Java Card applet
jcRMI.selectApplet( appAID, JCRMIConnect.REF_WITH_CLASS_NAME );
System.out.println("2");
// obtain the initial reference to the Purse interface
rmiRI myPurse = (rmiRI) jcRMI.getInitialReference() ;
System.out.println("3");
// debit the requested amount
try {
short balance = myPurse.debit ( debitAmount ) ;
System.out.println("débit effectué");
}
catch ( UserException jce ) {
short reasonCode = jce.getReason() ;
}
}
catch (Exception e) {
} finally {
try {
if(ca!=null){
ca.closeCard();
}
}catch (Exception e) {
}
}
}
} |
La ligne en rouge lève l'exception suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:525)
at java.net.Socket.connect(Socket.java:475)
at java.net.Socket.<init>(Socket.java:372)
at java.net.Socket.<init>(Socket.java:186)
at com.sun.javacard.clientlib.ApduIOCardAccessor.<init>(Unknown Source)
at paquet.PurseClient.main(PurseClient.java:24) |
J'ai vérifié que le simulateur tournait toujours.
Je pense que le problème vient de la génération des stubs (que j'effectue via le plugin RMI d'éclipse: je travaille sous éclipse...)
J'ai passé des heures à essayer de trouver une solution, mais je pense que je passe à coté de quelque chose d'essentiel et c'est pour cela que je lance un appel à l'aide.
Merci à tous et bonnes vacances pour les chanceux