Я создал сервер для отправки команд APDU в приложение Java-карты.
Соединение успешно установлено. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я успешно отправляю команду, но приложение Java Card не получает ее.
Следующий код представляет клиента, с которого я отправляю команды:
public class Client {
public static void main(String[] args) {
Socket sock;
try {
sock = new Socket("localhost", 9025);
InputStream is = sock.getInputStream();
OutputStream os = sock.getOutputStream();
CadClientInterface cad = CadDevice.getCadClientInstance(CadDevice.PROTOCOL_T0, is, os);
Apdu apdu = new Apdu();
System.out.println("Initialized apdu !");
byte[] installer = new byte[]{0x00, (byte) 0xA4, 0x04, 0x00, 0x09, (byte) 0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x08, 0x01, 0x7F};
System.out.println("Prepare installer of cap !");
apdu.setDataIn(installer, installer.length);
System.out.println("Apdu set !");
System.out.println("Apdu sent !");
System.out.println(apdu);
cad.powerUp();
System.out.println("Powered up !");
cad.exchangeApdu(apdu);
cad.powerDown();
System.out.println("Powered down !");
} catch (IOException | CadTransportException e) {
e.printStackTrace();
System.out.println("Fail! " + e.getMessage());
}
}
}
Апплет java-карты - это простой апплет, созданный в среде IDE.
public class Proj extends Applet {
/**
* Installs this applet.
*
* @param bArray
* the array containing installation parameters
* @param bOffset
* the starting offset in bArray
* @param bLength
* the length in bytes of the parameter data in bArray
*/
public static void install(byte[] bArray, short bOffset, byte bLength) {
new Proj();
}
/**
* Only this class's install method should create the applet object.
*/
protected Proj() {
register();
}
/**
* Processes an incoming APDU.
*
* @see APDU
* @param apdu
* the incoming APDU
*/
@Override
public void process(APDU apdu) {
//Insert your code here
}
}
В java-карте я включаю устройство и порт устанавливается. Я не знаю, почему команда успешно отправлена, а сервер карт Java не получает ее.
Edit:
Я увидел проблему о том, почему javacard не получил никаких данных. Проблема в клиенте. Когда оператор cad.powerUp();
достигает целых клиентских блоков и больше ничего не выполняется, как в случае вызова функции sleep();
. Итак, теперь действительно проблема в том, почему cad.powerUp () блокирует клиента.