ISO7816.SW_BYTES_REMAINING_00在javacard中返回9000状态

时间:2013-10-22 09:12:07

标签: javacard

我有一个问题困扰了我几天。 我想从智能卡向主机应用程序发送大小超过255字节的数据。 我在一些网站上看到了一段代码。这段代码就像吼叫:

private void sendData(APDU apdu) {
        // work out how many bytes to send this time and how many will be left
        BUF_IN_OFFSET[0] = 0;

        short remain = (short) ((short)372 - BUF_IN_OFFSET[0]);
        boolean chain = remain > MAX_APDU;
        short sendLen = chain ? MAX_APDU : remain;
        Util.arrayCopy(data, (short) 0, apdu.getBuffer(), (short) 0, sendLen);
        // Get ready to send
        apdu.setOutgoing();
        apdu.setOutgoingLength((short)sendLen);
        apdu.sendBytesLong(apdu.getBuffer(), BUF_IN_OFFSET[0], sendLen);

         // Check to see if there are more APDU's to send
        if (chain) {
            BUF_IN_OFFSET[0] += sendLen; // count the bytes sent
            remain -=sendLen;
            ISOException.throwIt((short)((ISO7816.SW_BYTES_REMAINING_00) + remain));

        } else {
            BUF_IN_OFFSET[0] = 0; // no more bytes to send
        }


    }

当我在netbeans模拟器中将apdu发送到卡时,它会正确发送6100。但当我把它发送到真实卡(smartcafe 3.2)卡。它发送给我9000.它意味着在模拟器中它工作,但通过真实卡它不起作用。 我猜它与协议T = 0或T = 1有关。 我没有找到T = 1的任何代码。上面的代码是针对T = 0。

提前感谢。

1 个答案:

答案 0 :(得分:0)

'6100'听起来像是一个矛盾的术语。它告诉读者获取一些数据,其中lengh可用。我相信真正的卡实际上会将其转换为9000,这是没有数据时的正确执行状态代码。