0

私はAsuro小さなロボットであるからBluetooth経由でバイトアレイを受信するAndroidアプリを開発しています。

このバイト配列はコマンドのプロトコルであるため、15の固定サイズがあります。さらに、アプリはバイト配列をAsuroに送信し、Asuroはそれを送り返します。

ただし、read(byte []、0,15)関数を使用してこの配列をLog.dに渡すと、このバイト配列は分割されます。

以下のコードを参照してください。

public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
    byte[] buffer = new byte[15];
int bytes = 0;

        // Keep listening to the InputStream while connected
while (true) {
    try {
    // Read from the InputStream
    bytes = mmInStream.read(buffer, 0, 15);
    if (buffer[0] != 0) {
        Log.d("Asuro-Android", "Input :" + Arrays.toString(buffer));
    }
    buffer = new byte[15];      
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}

Asuroに送っています:

Output: [58, 48, 49, 48, 48, 48, 49, 48, 48, 48, 51, 48, 48, 48, 48]

接続などが機能します。単純化するために、配列を作成して出力ストリームにフラッシュします。

しかし、私は得ています:

Input :[58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Input :[48, 49, 48, 48, 48, 49, 48, 48, 48, 51, 0, 0, 0, 0, 0]
Input :[48, 48, 48, 48, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

これは私の側(アプリ)のエラーでしょうか、それともasuroの側のエラーでしかありませんか?

4

1 に答える 1

1

これはBluetoothSPPプロファイルの性質であり、フレーム境界を提供しません。したがって、バッファ容量などに応じて、送信側SPP自体または受信側によって分割される可能性があります。パケットは常に固定サイズであるため、簡単な再組み立てを行うか、より一般的な場合は、獲得したヘッダーを追加して再組み立てできます。フレーム。

于 2013-01-29T15:33:31.353 に答える