使用串行端口连接智能卡时 CadClientInterface.powerUp() 挂起
Posted
技术标签:
【中文标题】使用串行端口连接智能卡时 CadClientInterface.powerUp() 挂起【英文标题】:CadClientInterface.powerUp() hangs while connecting smart card using Serial Port 【发布时间】:2018-05-08 09:40:19 【问题描述】:我正在尝试使用以下代码使用串行端口连接到我的智能卡:
String port = "COM1"; // serial port
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(port);
String appname = "CadClient";
int timeout = 30000;
CommPort commPort = portId.open(appname, timeout);
InputStream is = commPort.getInputStream();
OutputStream os = commPort.getOutputStream();
cad = CadDevice.getCadClientInstance(CadDevice.PROTOCOL_T1, is, os);
//...hangs here for unlimited time
cad.powerUp();
任何帮助为什么它卡在 powerUp() 上。谢谢
【问题讨论】:
【参考方案1】:转到您的设备属性并选中“不要打开 APDU 控制台”复选框。
这应该是这样的:
【讨论】:
感谢您的输入,但我没有看到此选项。你能详细说明一下吗? 你用什么IDE?什么模拟器? 我正在使用eclipse IDE并使用物理设备:omni智能卡 您的设备是否出现在 IDE 中? (我用一些图片编辑了我的答案)。 感谢您的努力,但此选项仅适用于模拟器而非实际设备。【参考方案2】:它挂起的最常见原因是卡没有响应重置,即没有从卡收到 ATR。这是在 powerUP() 上完成的。
这可能是由于一些其他 APDU 客户端正在使用非开放端口或端口。
【讨论】:
我假设 cadClient 只打开了一次端口,但是如何确保呢? 我相信某些 cad 设备或正在运行的模拟器已打开 PORT(用于服务)。您的代码是连接到该端口的客户端,从而将 APDU 发送到正在运行的服务。 请问你有什么建议?以上是关于使用串行端口连接智能卡时 CadClientInterface.powerUp() 挂起的主要内容,如果未能解决你的问题,请参考以下文章