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

java.io.IOE:bt套接字不在监听状态【AndroidMarshmallow】

赫连秦迟
2023-03-14

我正在尝试在nexus 5(Android 6)和谷歌眼镜之间建立连接。要连接的客户端代码:

try {
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(
                BluetoothParametersHolder.uuids[0]);
} catch (Exception e) {
    e.printStackTrace();
}

//In a thread
bluetoothSocket.connect();

服务器端代码:

 mmServerSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(
                BluetoothParametersHolder.NAME, BluetoothParametersHolder.uuids[0]);

//In a thread
socket = mmServerSocket.accept();

以https://github.com/vicmns/BluetoothGlass为参照。我面临的问题是,在accept()返回后,连接立即断开,并出现以下错误:

02-15 16:20:42.769 2163-2414/?e/Bt _ btif _ sock _ RFCOMM:find _ RFC _ slot _ by _ id找不到RFCOMM slot id:51 02-15 16:20:43.761 8345-8361/?w/system . err:Java . io . io异常:bt套接字不处于监听状态02-15 16:20:43.762 8345-8361/?w/system . err:at Android . bluetooth . bluetooth socket . accept(bluetooth socket . Java:453)02-15 16:20:43.763 8345-8361/?w/system . err:at Android . bluetooth . bluetooth server socket . accept(bluetooth server socket . Java:158)02-15 16:20:43.763 8345-8361/?w/system . err:at Android . bluetooth . bluetooth server socket . accept(bluetooth server socket . Java:144)02-15 16:20:43.763 8345-8361/?w/system . err:at Knowles . com . server app . handlers . bluetooth connection handler . doin background(bluetooth connection handler . Java:41)02-15 16:20:43.763 8345-8361/?w/system . err:at Knowles . com . server app . handlers . bluetooth connection handler . doin background(bluetooth connection handler . Java:16)02-15 16:20:43.763 8345-8361/?w/system . err:at Android . OS . async task $ 2 . call(async task . Java:295)02-15 16:20:43.764 8345-8361/?w/system . err:at Java . util . concurrent . future task . run(future task . Java:237)02-15 16:20:43.764 8345-8361/?w/system . err:at Android . OS . async task $ serial executor $ 1 . run(async task . Java:234)02-15 16:20:43.764 8345-8361/?w/system . err:at Java . util . concurrent . threadpoolexecutor . run worker(threadpoolexecutor . Java:1113)02-15 16:20:43.764 8345-8361/?w/system . err:at Java . util . concurrent . threadpoolexecutor $ worker . run(threadpoolexecutor . Java:588)02-15 16:20:43.782 8345-8361/?w/system . err:at Java . lang . thread . run(thread . Java:818)

我对蓝牙和眼镜很陌生。任何帮助都非常感谢。没有从现有帖子中获得太多帮助。我在这里尝试的只是从客户端(Glass)向服务器(Mobile)发送一条“你好”消息

共有1个答案

贺高飞
2023-03-14

查看框架代码内部,我们可以发现以下内容:

if (mSocketState != SocketState.LISTENING)
    throw new IOException("bt socket is not in listen state");

显然,如果套接字未处于状态LISTENING,则方法accept()抛出异常

在大多数情况下,如果BluetoothServerSocket的实例已经关闭,就会发生这种情况。在尝试接受连接之前,请确保BluetoothServerSocket未关闭。

 类似资料:
  • 问题内容: 对于linux c编程原始套接字,这是一个快速的问题。如果我只想使用原始套接字来监听任何接口,我是否真的必须绑定到ip地址或接口来监听流量?据我了解,我觉得我应该能够只调用sock();。然后启动recvfrom()流量。也许我错了,但是我看过一些不使用它的程序。 问题答案: 没错,您唯一需要做的就是打电话给then 。不过请注意,使用收听存在一些限制。 如果您不是在“发送后忘记”的基

  • 我正在用C语言编写一个服务器,使用POSIX sockets api。 这是作为GUI应用程序的一部分运行的,它需要能够停止和启动服务器监听和向客户端发送数据。 服务器的主要部分基本上是这样的(我排除了很多代码,因为其中一些与这个问题无关。) 换句话说: 让套接字监听连接 为select()调用设置fds 使用stdin调用select(),所有连接客户端套接字,以及获取从GUI发送的任何数据的管

  • 我正在使用Netty编写Java游戏服务器。我可以从本地主机成功连接客户端,但无法从远程PC连接。util中没有显示侦听套接字。我是不是遗漏了什么?

  • 现在,我可以通过NAT建立连接,但只能使用连接套接字: 但现在,发送SYN数据包进行连接的两个套接字已经连接。 你会认为我会做的,通过两个NATs得到一个连接,万岁。

  • 本文向大家介绍Android 实时监测(监听)网络连接状态变化,包括了Android 实时监测(监听)网络连接状态变化的使用技巧和注意事项,需要的朋友参考一下 看了网上的很多,都不是自己想要的。所以自己就参考着写了一个。 实现这个的方法很多,我是想的这种,如果哪有不足,有bug的地方希望大家指出,共同进步。。。。 先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知a

  • 本文向大家介绍Android广播接实现监听电话状态(电话的状态,拦截),包括了Android广播接实现监听电话状态(电话的状态,拦截)的使用技巧和注意事项,需要的朋友参考一下 首先我们来理解下监听器的机制。 Android的事件处理机制有两种:监听和回调。 A基于监听的事件处理 主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件监听器) 监听机