私は数日間私を混乱させた問題を抱えています。サイズが 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 の場合です。
前もって感謝します。