0

私は数日間私を混乱させた問題を抱えています。サイズが 255 バイトを超えるデータをスマート カードからホスト アプリケーションに送信したいと考えています。ある Web サイトでコードのブロックを見ました。このコードは次のようになります。

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 の場合です。

前もって感謝します。

4

1 に答える 1

0

「6100」という言葉は矛盾しているように聞こえます。これは、利用可能な長さを無視して、何らかのデータを取得するようにリーダーに指示します。実際のカードでは、データが利用できない場合の適切な実行ステータス コードである 9000 に実際に変わると思います。

于 2013-10-22T12:57:47.187 に答える