2012-02-20 5 views
0

Androidデバイス(Gingerbread 2.3.1)とPCの間のBluetooth接続でバイトが削除されるなどの問題が発生しています。私がデータを受け取る方法は、2バイトのバッファにあります。受信されている値は数分(値は波形を表す)にPCからストリーミングされています。ここではコードのいくつかのスニペットがありますので、あなたはそのアイデアを得ることができます。私のコードのベースはandroid bluetooth chat sample codeです。AndroidでのBluetooth接続でバイトが消えてしまう

BluetoothSocket socket; 

...

mmInStream=socket.getInputStream; 

...

byte[] buffer= new byte[2]; 

...

bytes = mmInStream.read(buffer); 

は、誰もが事のこの種の問題を持っていますか?ドロップされたバイトはランダムな時間に発生するように見えますが、それ以外の時間に受け取った値は期待どおりです。私は受け取っている値が16ビット符号付き整数なので、私は2バイトのバッファを使用しています。 PC側から私はRealTermを使ってデータのバイナリファイルを送信しています。

私のバッファが小さすぎ、ドロップされたバイトを引き起こしている可能性はありますか?

ありがとうございました

+1

「バイト」の値を確認していますか? – alanjmcf

+0

いいえ私はそうではありません。 mmInStream.read(buffer)が返ってきたときにバッファがいっぱいにならない可能性はありますか? – gtdevel

答えて

1

私は問題が何かを発見しました。私は正しい方向に私を指摘するためにalanjmcfに感謝したいと思います。

から返されたバイト数を変数bytesで確認していませんでした。私は単に返されるすべてbufferが2バイトを含むと予想していました。私はこの問題を解決する方法は、バックInputStreamからbufferを取得した後、次のコードをしていました:

//In the case where buffer returns with only 1 byte 
       if(lagging==true){ 
        if(bytes==1){ 
         lagging=false; 
         newBuf=new byte[] {laggingBuf, buffer[0]}; 
         ringBuffer.store(newBuf); 
        }else if(bytes==2){ 
         newBuf=new byte[] {laggingBuf, buffer[0]}; 
         laggingBuf=buffer[1]; 
         ringBuffer.store(newBuf); 
        } 
       }else if(lagging==false){ 
        if(bytes==2){ 
         newBuf = buffer.clone(); 
         ringBuffer.store(newBuf); 
        }else if(bytes==1){ 
         lagging=true; 
         laggingBuf=buffer[0]; 
        } 
       } 

これは私の問題を修正しました。より良い方法論に関する提案はありますか?

+0

C#バージョンを参照 – alanjmcf

2

あなたの答えをフォローしてください。すでに読み込んだバイト数を覚えて、それを必要な数と比較するだけで、次のバイトを書き込むためにインデックスに使用することもできます。 http://www.yoda.arachsys.com/csharp/readbinary.html

public static void ReadWholeArray (Stream stream, byte[] data) 
{ 
    int offset=0; 
    int remaining = data.Length; 
    while (remaining > 0) 
    { 
    int read = stream.Read(data, offset, remaining); 
    if (read <= 0) 
     throw new EndOfStreamException 
     (String.Format("End of stream reached with {0} bytes left to read", remaining)); 
    remaining -= read; 
    offset += read; 
    } 
} 
関連する問題