마스터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일 채택됨
위와같이 구현해야할려고하는데.. 어떤식으로 구현을 해야할지 잘 몰라서 그러는데 참조할만한 자료가 있을까요?
...