使用串行端口连接智能卡时 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() 挂起的主要内容,如果未能解决你的问题,请参考以下文章

如何自动检测串行 COM 端口 c# 的连接

如何将名称动态分配给 RFID 阅读器连接的串行端口

通过串行连接从智能卡读卡器接收数据(C#)

C++ 中的串行端口 (RS -232) 连接

没有与连接的串行端口通信?

VMware Workstation15为虚拟机添加串行口