鍍金池/ 問答/C++  Android  網(wǎng)絡(luò)安全/ 藍(lán)牙模塊hc-05向android app每隔10ms發(fā)送一組數(shù)據(jù),在20多秒之

藍(lán)牙模塊hc-05向android app每隔10ms發(fā)送一組數(shù)據(jù),在20多秒之后雙方就無法繼續(xù)通信

hc-05和app顯示處于連接狀態(tài),但相互之間發(fā)送消息已經(jīng)接收不到,想問一下有沒有做過碰到類似問題的,求指點(diǎn)?
補(bǔ)充一下,剛開始接收數(shù)組長度設(shè)置為16,雙方只能相互發(fā)消息維持20秒,然后再相互發(fā)消息就都收不到了,將數(shù)組長度設(shè)為1024后,就沒有這個問題出現(xiàn),所以,是不是接收數(shù)組長度太小,無法及時處理接收的數(shù)據(jù),然后造成了阻塞,形成了雙發(fā)發(fā)的信息都不能被傳遞?這個只是我的猜想,求大神解答

另外,剛開始設(shè)置為16長度,是因?yàn)槲覀冏远x協(xié)議的收發(fā)數(shù)據(jù)一幀只有9個字節(jié),而且是不斷在發(fā),APP只要拿到一幀就好,剩下的就不管了,所以當(dāng)時覺得接收數(shù)組不用定義太大。

接收的byte數(shù)組大小設(shè)置為多大合適?

/ 接收數(shù)據(jù)的線程 /
private class ConnectedThread extends Thread {

    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;
    
    public ConnectedThread(BluetoothSocket socket, String socketType) {
        Log.e(TAG, "create ConnectedThread: " + socketType);
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
        mState = STATE_CONNECTED;
    }

    @Override
    public void run() {
        int bytes;
        int i = 0;
        byte[] buffer = new byte[1024];
        CustomPacket packet = new CustomPacket();
        IOException exception = null;

        // Keep listening to the InputStream while connected
        while (mState == STATE_CONNECTED) {
      

            try {
               
                bytes = mmInStream.read(buffer);
                float[] value = packet.unpack(buffer);

                Message msg = new Message();
                msg.obj = value;
                msg.arg1 = BluetoothChatService.STATE_CONNECTED;
                msg.what = Constants.MESSAGE_READ;
                msg.setTarget(mHandler);
                msg.getTarget().sendMessage(msg);

            } catch (IOException e) {
                exception = e;
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
        if(exception != null){
            //重新連接
            connect(mDevice,true);
        }
    }

}

回答
編輯回答
心沉

打開藍(lán)牙的HCI log ,抓取hci log 看看通訊情況 ,hci log 可以用 wireshark 軟件查看 hci log文件一般會保存SD卡目錄下,也有的手機(jī)保持其他路徑,可以找 /etc下的藍(lán)牙配置文件查看保持路徑

2017年3月1日 20:36