当前位置: 首页 > 知识库问答 >
问题:

BluetoothSocket Connect()引发IOException读取失败,套接字可能已关闭

吕和风
2023-03-14

因此,我正在尝试将一个Android应用程序连接到raspberry Pi,设备配对并受信任,我收到一个与此处发现的错误相同的错误:IOException:读取失败,套接字可能已关闭-Android 4.3上的蓝牙

然而,这个解决方案看起来非常混乱,我甚至不知道如何将其与我当前的代码集成。以下是我目前的代码:

 @Override
    protected void onHandleIntent(Intent intent) {
        device = (BluetoothDevice) intent.getExtras().get("device");

        if (device != null) {
            Log.v("DeviceManager", "Beginning attempts to communicate to: " + device.getName());
            try {
                BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
                //Throws exception here:
                socket.connect();
                outputStream = socket.getOutputStream();
                inputStream = socket.getInputStream();

                while (Utils.appIsInForeground && device != null) {
                    if (outputStream == null){
                        Log.e("DeviceManager", "Looks like the outputStream is null...");
                        if (inputStream == null){
                            Log.e("DeviceManager", "And input stream is null, are you even connected to the device?");
                        }else{
                            Log.e("DeviceManager", "Although strangely, input stream has been set.");
                        }
                    }else{
                        String myString = "This is a string!";
                        byte[] myByteArray = myString.getBytes("UTF-8");
                        outputStream.write(myByteArray, 0, myByteArray.length);
                    }
                    Thread.sleep(1000);
                }

            } catch (IOException e) {
                e.printStackTrace();
                Log.e("DeviceManager", "Can't create a socket to the bluetooth device.");
            } catch (InterruptedException e) {
                e.printStackTrace();
                Log.e("DeviceManager", "The sleep thread was interrupted.");
            } catch (NullPointerException e) {
                e.printStackTrace();
                Log.e("DeviceManager", "A null pointer exception, this is probably not good.");
            }
        }else {
            Log.e("DeviceManager", "The Device Manager has been passed a null object instead of a device.");
        }
    }

这是我得到的堆栈跟踪:

03-26 11:44:09.525 7916-8048/com.app.name W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
03-26 11:44:09.526 7916-8048/com.app.name W/System.err:     at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:685)
03-26 11:44:09.527 7916-8048/com.app.name W/System.err:     at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:697)
03-26 11:44:09.527 7916-8048/com.app.name W/System.err:     at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:374)
03-26 11:44:09.527 7916-8048/com.app.name W/System.err:     at com.app.name.service.DeviceManager.onHandleIntent(DeviceManager.java:60)
03-26 11:44:09.527 7916-8048/com.app.name W/System.err:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:67)
03-26 11:44:09.528 7916-8048/com.app.name W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
03-26 11:44:09.528 7916-8048/com.app.name W/System.err:     at android.os.Looper.loop(Looper.java:154)
03-26 11:44:09.528 7916-8048/com.app.name W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
03-26 11:44:09.528 7916-8048/com.app.name E/DeviceManager: Can't create a socket to the bluetooth device.

奇怪的是,我的Raspberry Pi在BluetoothCtl上显示,手机已连接,但随后立即断开连接。

共有1个答案

赫连正初
2023-03-14

只为查询Raspberry板上的SDP数据库而创建连接。

1) 检查树莓一侧的SDP是否真的包含请求的MY_UUID记录

2)这不是很明显,如果覆盆子板是结合与您的Android。这是必需的,因为您在发布的代码中创建了一个安全套接字。

  • 您可以尝试不需要绑定设备的不安全版本:CreateUnsecurerCommsocketToServiceRecord
 类似资料:
  • 我在Android蓝牙API中连接客户端套接字时遇到问题。我已经读过这些帖子了:这篇,这篇,这篇,还有这篇。根据这些帖子,我编写了如下代码,但仍然不起作用: 下面是包含套接字上返回的错误的日志。connect(): 问题似乎出现在Android4.3之后,因为我在Android7.1和8.1上使用的套接字的端口值。有人知道如何在Android上使用蓝牙吗?

  • 我想把我的Android设备(Android4.2.2)与BluetothAdapter创建的另一个Android设备配对。startDiscovery()。我在运行BluetoothDevice时发现了什么。connect()请求配对开始。但我在运行connect()时遇到了问题 我在中尝试了impliment fallback和gatclass方法 IOException:读取失败,套接字可能

  • 代码仅在第一次正常工作,如果我试图再次连接它,它会抛出此异常: 读取失败,套接字可能已关闭或超时,读取重试:-1 这是我连接蓝牙打印机的功能:

  • 我正在为客户机发送对象到服务器,在服务器端修改该对象,并将其重新发送到客户机。将对象从客户机发送到服务器很好,它工作正常,但当我将对象发送回来时,它给出了异常,Socket关闭。这里是代码。IntString和ParentObj是我要发送对象的类。 服务器类 用于发送和接收对象的Send_recv类。

  • 我有一个应用程序,打印数据(文本和图像)到热敏打印机。 我的问题是,每当我打印冗长的数据时,打印输出就会被剪切,我会在打印的try-catch语句中抛出一个。 以下是我打印数据的部分: 这是我的打印签名功能,它类似于我用来打印徽标的功能。 ConvertBitmap函数: convertArgbToGrayScale函数: 我现在的问题是,在调用printSignature()函数后,打印机停止打