当读卡器连接到卡并发送命令时,如果发送命令和接收响应的时间是,系统通知超时异常是否自动?
如果是这样,PC / SC的超时值是多少?
或者我必须定义这个值?
答案 0 :(得分:3)
嗯,当阅读器中没有可用的卡时,有两种方法可用于处理异常:
boolean sun.security.smartcardio.TerminalImpl.waitForCardAbsent(long timeout)抛出CardException [虚拟]
等待此终端中的卡不存在或超时到期。 如果方法由于超时过期而返回,则返回false。 否则返回true。
如果调用此方法,此终端中不存在卡,则为 马上回来。
参数: 超时如果为正,则阻止最多超时毫秒;如果为零,则无限期阻塞;一定不能否定
返回:如果方法因过期超时而返回false,否则返回true。
例外: IllegalArgumentException 如果超时为负, CardException 如果操作失败
实施javax.smartcardio.CardTerminal。
文件TerminalImpl.java第136行的定义。
boolean sun.security.smartcardio.TerminalImpl.waitForCardPresent(long timeout)抛出CardException [虚拟]
等待此终端中存在卡或超时到期。 如果方法由于超时过期而返回,则返回false。 否则返回true。
如果调用此方法时此终端中存在卡,则为 马上回来。
参数:如果为正则超时,阻止最多超时毫秒;如果为零,则无限期阻塞;一定不能否定
返回:如果方法因过期超时而返回false,否则返回true。
例外: IllegalArgumentException 如果超时为负, CardException 如果操作失败实现 javax.smartcardio.CardTerminal
文件TerminalImpl.java第132行的定义。
对于卡的响应超时,您应首先检查您的阅读器手册。除了向卡发送APDU命令之外,一些智能卡读卡器还具有一些附加功能。该命令称为“伪APDU”。例如,我有一个 ACR38 联系智能卡读卡器,我在其手册中找到了以下内容:
(来自here第14页)
最后,如果您在读者手册中没有找到任何有用的内容,我认为您有两种选择:
timeout
方法,并在发送每个命令后计算时间,并检查响应时间是否大于特定值。如果时间大于您的特定值,则调用disconnect
方法并重新连接,然后您可以以这种方式处理它。 检查以下链接,我认为您可以在那里找到有用的东西来实现目标:
http://www.openscdp.org/ocf/api/de/cardcontact/opencard/terminal/smartcardio/PCSCIOControl.html
http://ludovic.rousseau.free.fr/softwares/pcsc-perl/PCSC.html