2013-06-21 3 views
0

장치가 수시로 통신 할 수있는 응용 프로그램을 개발해야합니다 (한 장치는 간단한 메시지를 보내고 다른 장치는 응답을 보냅니다).BluetoothServerSocket : 후속 연결을 처리하는 방법

이 통신은 너무 자주 (몇 분에 한 번) 발생하지 않으므로 장치간에 영구 연결을 유지하는 것이 적절하지 않은 것처럼 보입니다. 게다가 어떤 이유로 연결이 끊어 질 수 있으므로 복구 논리가 필요합니다.

대신 앱에 데이터를 보낼 때마다 새로운 연결을 설정하는 것이 좋습니다. 그러나 사양은 BluetoothServerSocket.accept이 반환 된 후 서버 소켓이 닫혀 있어야한다고 말합니다. 즉, 앱이 더 이상 후속 수신 연결을 수신 할 수 없음을 의미합니다.

현재 서버 소켓을 닫고 동기식으로 들어오는 연결을 처리하지 않기 때문에 응용 프로그램이 이전 연결을 처리하고 닫을 때까지 새 연결을 수락하지 않습니다. 다른 피어가 이러한 처리 중에 연결을 시도하면 어떻게됩니까? 서버가이를 수용 할 준비가 될 때까지 실패하거나 차단됩니까?

답변

0

문서에 "더 많은 연결을 허용하고 싶지 않으면 BluetoothServerSocket을 폐기 할 수 있습니다 (또는 폐기해야합니다.)"라고되어 있습니다. 더 많은 연결을 받아들이려고하기 때문에 계속 연결해야합니다.

설명서에는 ServerSocket의 accept 메소드에 대한 다음 내용도 나와 있습니다. 수락은 차단 호출입니다. 연결이 수락되었거나 예외가 발생한 경우 반환됩니다. 원격 장치가이 수신 서버 소켓에 등록 된 것과 일치하는 UUID로 연결 요청을 보낸 경우에만 연결이 허용됩니다. 성공하면 accept()는 연결된 BluetoothSocket을 반환합니다.

+0

나는 초기 아이디어 (영원한 서버 소켓 + 동기 처리)를 테스트 해 보았습니다. 들어오는 연결은 자신의 차례가 받아 들여지기를 기다립니다. 그러나 때로는 클라이언트 소켓 연결에 실패 (시간 초과?) 및 대기중인 동안 장치 중 하나가 unbond있어. –

+0

필자는 각 피어 장치에 대해 별도의 서버 소켓을 만들어야 할 것 같습니다. –

관련 문제