Qt经典蓝牙系列一(什么是经典蓝牙开发,经典蓝牙的通信机制原理)

本文介绍了经典蓝牙的通信机制和开发过程,通过对比Qt与Android的实现方式,阐述了服务端和客户端的设置。经典蓝牙基于socket通信,与TCP相似,简化了低功耗蓝牙的属性特征通信。文中详细讲解了Qt中如何启动监听、建立连接和数据交换,并提到了Android原生开发的相应步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

    最近开发蓝牙遇到问题很多,现在开始一一记录书写,先从经典蓝牙开始,后从低功耗蓝牙写,一直没什么时间,只能抽空写了!好了,进入主题

什么是金典蓝牙

    经典蓝牙和低功耗蓝牙,我在最开始的时候也是傻傻分不清,以为蓝牙就是一套封装使用就可以了,没想到还有那么多道道,那他们两个的区别在于哪里呢?
    很简单,经典蓝牙就是socket开发通信,低功耗的就是属性特征通信开发,记住这点就好,所以开发经典蓝牙感觉相对简单快捷一点,因为大部分人已经开发过TCP通信了,所以蓝牙开发也是一样的流程,照搬套用即可!

通信机制

    所以说,要在两台设备上创建连接,就需要实现服务器端和客户端机制,TCP通信不也是这样,相信大家了解tcp的肯定就恍然大悟了,金典蓝牙开发也就不过如此

    下面介绍下简单的通信过程

在服务端启动监听,等待客户端的连接请求 -> 有连接请求后连接 -> 连接成功后有一个socket(也即套接字)-> 通过socket套接字得到IO流 -> 往输入流中读数据,或者往输出流中写数据 -> 即可以实现两台设备之间的通讯;

    上面说过,要在两台设备上创建连接,需要实现服务器端和客户端机制,其中有一台需要开放服务端的套接字,另外一台作为客户端,需要通过蓝牙的Mac地址向服务端发送连接请求;当我们的服务端和客户端在同一个频道上的话,就可以进行连接;之后服务端会接收一个套接字,这个套接字会作为服务端和客户端 进行通信的接口;

设置服务端过程

    下面就说下Qt设置蓝牙服务的过程:

Qt过程原理

    设置服务器套接字 并 接受连接的基本过程:QBluetoothServer通过调用 listen方法来启动监听,定义如下:

bool listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0)
QBluetoothServiceInfo listen(const QBluetoothUuid &uuid, const QString &serviceName = QString())

    然后通过监听newConnection信号,在对应连接的插槽中调用 nextPendingConnection()来获得 QBluetoothSocket 对象,连接发送和接收数据。

    除非要接受更多连接,否则调用 close() 结束该次通信;

android 过程原理

    Qt 这边是简洁了很多了,如果是android这边,采用原生语言实现首先就要通过调用
listenUsingRfcommWithServiceRecord(String, UUID) 获取 BluetoothServerSocket
通过调用 accept() 开始侦听连接请求

设置客户端过程

    实现原理都是一样的!下面再来说说客户端的设置过程,一般我们的应用担当的就是客户端,很少需要担当服务端的,就好TCP一样道理!

Qt过程原理

    Qt 实现 首先获取本地设备 进行扫描 QBluetoothDeviceDiscoveryAgent,通过扫描到的Mac地址,Mac地址是一个设备的全世界唯一的标识;生成QBluetoothSocket,然后发起连接即可!

android过程原理

    android 原生是首先要获取表示该远程设备的BluetoothDevice对象,这个对象是通过蓝牙的Mac地址构造的;通过BluetoothDevice对象,获取BluetoothSocket并发起连接,使用BluetoothDevice对象调用createRfcommSocketToServiceRecord(UUID),获取BluetoothSocket,再通过connect()发起连接;

    这里说下,android的所有实现都是在线程中操作!

    好了经典蓝牙开发的概念就到这里,android的原理才是最正确过程,因为Qt帮我们做了很多事情,所以真正的很多过程被省略简化了!感觉就好像Qt的过程和原生的不太一样,其实内部实现都是一样的,可以参考TCP通信原理

觉得分享的内容还不错, 就请作者喝杯咖啡吧~~在这里插入图片描述

关注公众号

关注公众号,可下载pdf资源
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fu_Lin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值