问题标签 [bluetooth-socket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
201 浏览

android - 如何使用 TLS 通过蓝牙经典安全传输数据

我是一个正在开发的移动应用程序(使用 Android),我想通过蓝牙将数据传输到其他应用程序(桌面)。

我可以在蓝牙设备之间启用搜索、配对和建立连接,并能够发送数据。

但我想通过在应用层级别实现 TLS 来安全地发送数据。我搜索了答案,但找不到通过蓝牙传输数据的方法。

我什至遇到过这篇文章:在 Android 中使用 TLS

我遇到了海绵城堡来实现 TLS,但我无法获得蓝牙的样本。

是否可以为蓝牙实现 TLS?如果是,有人可以指导和分享示例或教程。

谢谢。

0 投票
0 回答
607 浏览

android - 使用蓝牙套接字以编程方式将文本发送到android中的另一个蓝牙设备

为了以编程方式将数据发送到另一个蓝牙设备,我使用蓝牙套接字代码。每当我调用 bluetoothSocket.connect(); 它给出连接被拒绝或连接到对等异常。我对必须在其中使用哪个 UUId 或从哪里获得它感到困惑。下面是代码片段。

帮助赞赏..!!

0 投票
1 回答
1194 浏览

python - RPi 3 Python 脚本 - NameError:未定义名称“BluetoothSocket”

所以我对python脚本比较陌生,我遇到了这段代码,它应该在树莓派和智能设备之间通过蓝牙配置wifi。不幸的是,我一直遇到标题中列出的错误。我希望有人可以复制并运行代码并告诉我为什么我一直遇到这个错误。非常感谢所有帮助!

此代码输出

0 投票
1 回答
806 浏览

java - 如何确保在关闭 Android BluetoothSocket 之前发送所有数据

我正在制作一个安卓应用程序,它将通过蓝牙在手机之间进行通信。为了节省电池,我想避免一直打开蓝牙连接。所以每次我要发送消息时,我都会打开一个连接,发送消息,刷新,然后关闭。

我的问题是,有时,但并非总是,接收电话会给我臭名昭著的“java.io.IOException:bt socket closed,读取返回:-1”。我看到BluetoothSocket 文档指出

BluetoothSocket 是线程安全的。特别是,close() 总是会立即中止正在进行的操作并关闭套接字。

但是,一般蓝牙页面指出:

完成 BluetoothSocket 后,请始终调用 close()。这样做会立即关闭连接的套接字并释放所有相关的内部资源。

这是我发送消息的线程的摘录。

这是我接受传入连接的线程的摘录:

我意识到刷新和关闭是多余的,但事实是,有时由于硬件延迟,套接字在发送所有消息之前在发送端关闭。

我可以确认所有消息每次都完美到达,无论我发送它们的速度有多快......如果我不关闭套接字。但是,我知道关闭套接字始终是最佳做法。

那么如何确保在调用 socket.close() 之前发送所有消息?显然,flush() 和流 close() 没有做它们应该做的事情,否则,无论我何时调用 socket.close(),消息都会被完全发送。

0 投票
1 回答
641 浏览

android - 蓝牙套接字不会总是连接导致 IOException

在我的应用程序中,我在找到正确的信标后使用一些库检测信标,我使用它的名称来查找另一个蓝牙设备(Android 设备 5.0),然后尝试使用谷歌在他们的示例中提供的方法和类通过蓝牙连接到手机蓝牙聊天应用程序,但套接字永远不会连接它总是给出 IOException(套接字关闭)或(套接字超时 ret:-1)。

我尝试了在线提供的所有解决方案,并在 Stack Overflow 上发布了数十个问题,但没有一个有效。

我得出了一个绝望的结论,可能同时使用低功耗蓝牙和蓝牙会引起冲突,对吗?还是完全错误?

这是我的代码

0 投票
0 回答
481 浏览

java - 我的应用程序启动后如何关闭任何以前的蓝牙套接字?

在我的应用程序中,我在每个会话中打开和关闭同一设备上的蓝牙套接字并监听数据。当我关闭一个时,我确保关闭输入和输出流,然后在一个cancel方法中进行套接字。尽管如此,对于某些人来说,该应用程序仍在尝试从设备中读取数据。我知道是因为我读取了来自run()侦听线程中的日志,其中有一个侦听标志设置为 false in cancel,并且侦听线程将在套接字因 关闭而结束时结束IOException,但这永远不会发生,所以套接字仍然必须打开。即使该人没有使用该应用程序,我也会每天每秒看到尝试读取的日志。这可能是因为应用程序崩溃并且cancel方法没有被调用。无论哪种方式,我都不能保证会调用取消方法。如果这些都是在独立创建的新线程中打开的,我如何关闭以前在启动我的应用程序时打开的任何蓝牙套接字?

这家伙有同样的问题,但我没有看到任何解决方案: Android bluetooth connection doesn't close after application crash

接受的答案不好,因为:

  1. 当前用户UncaughtExceptionHandler尚未运行该代码,并且他们需要在新版本发布时关闭任何以前的连接

  2. 必须有对套接字的UncaughtExceptionHandler引用,而它没有。我希望能够在应用程序启动时关闭任何蓝牙套接字。

  3. 提出这个问题的人询问如何获取有关套接字的信息,以便在应用程序启动并且您想关闭它们时存储,但没有得到回应。

编辑:

我如何打开套接字(删除了日志记录代码):

我如何关闭套接字:

听力:

0 投票
2 回答
192 浏览

android - 蓝牙插座信号大小错误

我正在为 Android 上的蓝牙编写一个主从设计的应用程序。微微网中的主站最多可以有 7 个活动的从站。我已经阅读了 Android 蓝牙开发指南和BluetoothSocket.java源代码,但是没有提到从站的最大数量。所以我尝试在以下代码中接受超过 7 个从站:

结果在第 8 次迭代中,我从accept()方法中得到了这个异常:

我的问题是它是否与蓝牙标准(7 个主动从属)有关,或者还有其他我不知道的情况?

0 投票
2 回答
739 浏览

android - 蓝牙聊天中未收到消息。我的处理程序坏了吗?

我正在开发 android dev 上的项目。BluetoothChat 的网站,它似乎可以正确发送消息但没有收到它们。过去,我尝试创建另一个蓝牙应用程序,当连接到设备时,系统会提示我确认连接并显示 PIN 码。在当前的应用程序上工作时,我从来没有得到提示。但是,它没有遇到任何异常,并且似乎正在发送消息。这是我用于管理连接的 Thread 类:

在它下面是用于写入 OutputStream 的扩展函数:

我只是不确定我的错误在哪里。我在想这是我发送消息的方式有问题吗?但是当我使用调试器单步执行我的代码时,我真的没有看到任何不合适的地方。现在我认为问题出在接收设备的末端,它似乎根本没有收到任何东西。我也会发布我的 Handler 和 broadcastReceiver :

这也是我的 AcceptThread:

如果你能发现任何东西,请告诉我。我非常感谢您的帮助。另外,我应该提到原始代码是用 Java 编写的。我正在用 Kotlin 写我的。

0 投票
1 回答
2730 浏览

android - Kotlin readBytes() 永远不会完成

我只是想通过蓝牙套接字进行读写,但我的 readBytes 调用没有完成。我认为这很简单,但也许我只是使用了错误类型的流或其他东西。截至目前,我的代码只是将少量文本作为字节发送。这是占位符代码,将替换为通过流写入和读取文件的代码。这是我的接收线程:

这是我的发送线程:

数据已成功发送,BluetoothService.log("data sent")调用已到达并显示在运行发送线程的设备的 logcat 中。对于运行接收线程的设备,记录“准备读取数据”消息,但从不记录data read: "$bytes message".

我怎样才能完成对 inStream.readBytes() 的调用?

编辑:我收到的新错误消息:

0 投票
0 回答
959 浏览

android - 如何在 Android 的蓝牙广播接收器中创建蓝牙服务器套接字连接?

上下文如下,我有一个 Android 应用程序,它在特定设备连接到它时启动一个活动,并发送一条代码消息。该设备不是另一个 android 应用程序,在这种情况下问题会容易得多。该设备是物联网设备 HC05。所以这个设备处于主模式,它尝试连接在这种情况下是从属的 android 应用程序。简而言之,android app必须是slave作为服务器才能接收连接,并且其他设备处于master模式,而且android app必须在广播接收器中检测设备,所以我不能直接使用使用BluetoothServerSocketaccept()方法,因为我无法运行线程。

我得到的最远的是实现此功能连接和断开蓝牙设备两次。所以,我的应用程序第一次启动广播接收器并检测到BluetoothDevice,它会阻止serverSocket.accept(). 然后,当我第二次断开并再次连接蓝牙设备时,我的应用程序成功返回了一个连接的套接字,我可以传输数据......是的!

这是我的代码

问题是我只需要从设备连接一个连接就可以做到这一点,而无需连接和断开设备。类似于从设备创建一个连接的套接字(就像方法BluetoothServerSocket一样accept()),但是BluetoothDevice广播接收器给我的。

另外,我在设备设置为从模式的情况下独立启动与应用程序的连接没有问题

device但是当我使用广播接收器给我的对象时,这对我不起作用。它抛出IOException: socket CONNECT read failed socket might closed or timeout可能是因为设备处于主模式。

我希望有人可以在我找不到任何商品的情况下帮助我。