JavaSmartCardIO- Как обработать исключение тайм-аута соединения ПК /SC?

Когда устройство считывания карт подключается к карте и отправляет команду, если время отправки команды и получения ответа, является ли системное уведомление об исключении тайм-аута автоматически?
Если да, то каково значение времени ожидания ПК /SC?
Или я должен определить это значение?

1 ответ

Что ж, есть два доступных метода для обработки исключений, когда в считывателе нет карты:

логическое sun.security.smartcardio.TerminalImpl.waitForCardAbsent (длительное время ожидания) создает исключение CardException [виртуальное]

Ожидает, пока в этом терминале не появится карта или не истечет время ожидания. Если метод возвращается из-за истечения времени ожидания, он возвращает false. В противном случае это вернет истину.

Если в этом терминале нет карты при вызове этого метода, он немедленно возвращается.

Параметры: тайм-аут, если положительный, блокировать до миллисекунд до тайм-аута; если ноль, заблокировать на неопределенный срок; не должно быть отрицательным

Returns: false, если метод возвращается из-за истечения времени ожидания, в противном случае - true.

Исключения: IllegalArgumentException, если тайм-аут отрицателен, CardException, если операция не удалась

Реализует javax.smartcardio.CardTerminal.

Определение в строке 136 файла TerminalImpl.java.

логическое sun.security.smartcardio.TerminalImpl.waitForCardPresent (длительное время ожидания) создает исключение CardException [виртуальное]

Ожидает, пока в этом терминале не появится карта или не истечет время ожидания. Если метод возвращается из-за истечения времени ожидания, он возвращает false. В противном случае это вернет истину.

Если при вызове этого метода в этом терминале присутствует карта, она немедленно возвращается.

Параметры: тайм-аут, если положительный, блокировать до миллисекунд до тайм-аута; если ноль, заблокировать на неопределенный срок; не должно быть отрицательным

Returns: false, если метод возвращается из-за истечения времени ожидания, в противном случае - true.

Исключения: IllegalArgumentException, если время ожидания отрицательное, CardException, если операция завершилась неудачей. Реализует javax.smartcardio.CardTerminal.

Определение в строке 132 файла TerminalImpl.java.


Для тайм-аута ответа карты, вы должны сначала проверить руководство вашего читателя. некоторые устройства чтения смарт-карт имеют некоторые дополнительные функции, помимо отправки команд APDU на карту. Эта команда называется "Псевдо APDU". Например, у меня есть контактный считыватель смарт-карт ACR38, и я нашел следующее в его руководстве:

( Отсюда страница 14) введите описание изображения здесь


Наконец, если вы не нашли ничего полезного в руководстве для читателя, я думаю, у вас есть два варианта:

  • Реализация timeout метод в вашей многопоточной Java-программе, которая выполняется всегда и вычисляет время после отправки каждой команды, и проверяет, больше ли время отклика, чем конкретное значение, или нет. В случаях, когда время превышает ваше конкретное значение, оно вызывает disconnect метод и снова подключить его, и тогда вы можете справиться с этим таким образом.
  • Использование функций библиотеки PCSC/CCID для контроля этого тайм-аута.

Проверьте следующие ссылки, я думаю, что вы можете найти что-то полезное там, чтобы нацелить вашу цель:

http://www.openscdp.org/ocf/api/de/cardcontact/opencard/terminal/smartcardio/PCSCIOControl.html

http://ludovic.rousseau.free.fr/softwares/pcsc-perl/PCSC.html

https://github.com/credentials/smartcardjs/blob/master/ext/scuba/acr122provider/src/net/sourceforge/scuba/smartcards/ACR122TerminalFactorySpi.java

http://myacr38.blogspot.com/2007/05/program.html

Другие вопросы по тегам