마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 블루투스 SPP read inputstream 문의

0 추천

현재 SPP를 bluetoothchat로 구현해놓은 상태인데요...

연결된 디바이스에서 데이터를 

byte를 78byte를 보내니 안드로이드 APP에서 한번에 다 받을때가 있고,

나눠서 받는데 나눠서 받는것도 마음대로 받더라구요...

찾아보니 spp 특성상 프레임의 경계가 없어서 그렇다고 하던데...

이럴경우 제 생각에서는 endpoint를 주어서 endpoint를 받을때 까지 처리하면 될거같은데..

아래와 유사하게 구성하니 데이터가 제대로 받지 않더라구요...

다른 방법으로 해야하나요???

상대에서는 e2 00 01 04 ~~~이런식으로 데이터를 52 78 44 6 bytes 씩 각각 보내에서 앱에서 받습니다.

제발 도움 부탁드리겠습니다...

private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;
        public ConnectedThread(BluetoothSocket socket) {
                        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;
        }
 
        public void run() {
                    byte[] buffer = new byte[78];   //data길이만큼
                   int bytes = 0;
                    while (true) {
                try {
                    while (mmInStream.read(buffer)) {
                                             bytes= mmInStream.read(buffer);
                         Log.i(TAG, "length  "+ bytes);
 
                                          if (mmInStream.available() == 0)
                            break;
                    }
                } catch (IOException e) {
                    Log.e(TAG, "disconnected", e);
                    prevaluedelete=false;
                    connectionLost();
                    break;
                }
 
            }
        }

 

쿠쿠부다스 (6,470 포인트) 님이 2017년 3월 14일 질문

1개의 답변

0 추천
 
채택된 답변

이런 경우 보통 아래처럼 합니다.

  • 특정 바이트를 종료 표식으로 사용하거나
  • 데이터 길이를 먼저 보내고 실제 데이터를 보냅니다.
익명사용자 님이 2017년 3월 14일 답변
쿠쿠부다스님이 2017년 3월 20일 채택됨
위와같이 구현해야할려고하는데.. 어떤식으로 구현을 해야할지 잘 몰라서 그러는데 참조할만한 자료가 있을까요?
...