현재 블루투스를 사용하여 두 개의 안드로이드 장치간에 데이터를 보내려고합니다. 블루투스 전송, 소켓 및 스트림과 관련하여 많은 질문을 읽었습니다. 지금까지 아무런 운도없이. 연결 부분이 작동 중입니다.안드로이드 블루투스 소켓 데이터 전송 및 라이프 사이클
BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(myOtherDeviceAdress);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID.fromString(myUUID));
socket.connect();
를 그리고 수신 측에 OutputStream
OutputStream mmout=tmp.getOutputStream();
byte[] toSend="Hello World!".getBytes();
mmout.write(toSend);
mmout.flush();
를 사용하여 일부 데이터를 보내려고 : 내가 장치 주소는 다음 사용하여 연결을 열 수
mBluetoothServerSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("ccv_prototype", UUID.fromString(myUUID));
mBluetoothSocket = mBluetoothServerSocket.accept(3 * 1000);
InputStream is = mBluetoothSocket.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(is));
그리고 그런 다음 현재 버퍼를 읽으려는 다른 버전입니다. 현재 :
int c;
StringBuilder response = new StringBuilder();
try {
while ((c = r.read()) != -1) {
//Since c is an integer, cast it to a char. If it isn't -1, it will be in the correct range of char.
response.append((char) c);
}
} catch (IOException e) {
e.printStackTrace();
}
String result = response.toString();
Log.d("MyTag", "Received String: " + result);
여기 내 문제는 내가 OutputStream
을 닫지 않으면받는쪽에 EOF가 수신되지 않는다는 것입니다. 그러나 mmout.close();
을 추가하면 보내려는 메시지를 읽을 시간이 있기 전에 닫힙니다. 지금까지 유일한 생각은 특정 토큰을 EOF로 보내는 것입니다. 그러나 이것은 올바르게 들리지 않습니다.
무엇을 놓쳤습니까? 도움을 주시면 감사하겠습니다.
귀하의 통찰력에 감사드립니다. 지금 내 마음에 분명해. 보낼 특정 토큰과 관련하여 조언이 있습니까? 나는 이것에 대한 몇 가지 문제를 가지고 성공하지 않고 특정 2 바이트 토큰을 보내려고했다. 빠르고 더러운 모드로 들어갔다가 순간에 줄 바꿈을 사용했는데 조금 컸습니다. – Nerkatel
임의의 길이의 간단한 텍스트 문자열을 보내는 경우 줄 바꿈 문자를 사용할 수 있습니까? 또는 더 정교한 패킷 구조를 설계 할 수 있습니다. 예를 들어 페이로드 길이를 설명하는 헤더 필드로 시작합니다. 이것은 당신이하고 싶은 일과 당신이 연결을 통해 교환하려고 시도하고있는 일로 정확히 바뀝니다. – Trevor