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

블루투스 연결이 시작하자 마자 소켓이 닫힙니다.

0 추천

블루투스 구현을 하고 있는데 사용하고 있는 코드가 예전버전이라 그런지 연결은 되는데 바로 연결이 끊깁니다. 오류 로그는

E/BluetoothService: disconnected

                    java.io.IOException: socket closed

                        at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:104)

                        at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:640)

                        at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)

                        at java.io.InputStream.read(InputStream.java:101)

                      at com.example.line.rc_controller.Pairing_blue$ConnectedThread.run(Pairing_blue.java:371)

이고 코드를 짜는데 사용하는 예제 소스는 구글에 돌아다니고 있는 BluetoothChat라는 예제를 사용하고 있습니다.(좀 예전 코드 같긴 하지만....)

    private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        private  final InputStream mmInstream;
        private  final OutputStream mmOutStream;

        public ConnectedThread(BluetoothSocket socket) {
            Log.d(TAG, "create ConnectedThread");
            mmSocket = socket;
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            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() {
            Log.i(TAG, "BEGIN mConnectedThread");
            byte[] buffer = new byte[1024];
            int bytes;

            while (true) {
                try {
                    bytes = mmInstream.read(buffer);
                }catch (IOException e) {
                    Log.e(TAG, "disconnected", e);
                    connectionLost();
                    break;
                }
            }
        }

        public void write(byte[] buffer) {
            try {
                mmOutStream.write(buffer);

            } catch (IOException e) {
                Log.e(TAG, "Exception during write", e);
            }
        }

        public void cancel() {
            try {
                mmSocket.close();
            }catch (IOException e) {
                Log.e(TAG, "close() of connect socket failed", e);
            }
        }
    }

오류가 나는 소스부분입니다. 에러가 나는 부분의 코드를 확인해 보니

 

bytes = mmInstream.read(buffer);

부분에서 나는것 같은데 무엇이 잘못된 건지 잘 모르겠습니다. 해결방법을 알려주시면 감사하겠습니다. 

Raseu (120 포인트) 님이 2018년 5월 22일 질문
저도 똑같은 문제가 있는데 답변이 없네요
혹시 문제가 해결 되셨나요?

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...