[Bluetooth]搜索一定范围内的远程蓝牙设备

Windows枚举搜索远程蓝牙设备 主要使用微软自带的蓝牙API,注意使用的蓝牙适配器应当使用的是微软自带的蓝牙驱动(可以通过设备和打印机界面添加远程蓝牙设备即表示可以使用windows蓝牙api,此时安装的蓝牙设备会在设备管理器中显示为Bluetooth链接上的标准串行 ),否则这些api会不起作用。主要代码如下: #include #include #include #include #include 阅读详情
可以利用下面这些变成元素创建一个查询来搜索一定范围内的远程蓝牙设备:
注意     为了使清晰起见,文中忽略了错误处理
搜索并返回远程设备的地址
  1. 提供Winsock的版本和实现细节的数据来初始化caller application。可以通过调用WSAStartup函数来获得这个数据。
WSADATA wsd;
WSAStartup (MAKEWORD(1,0), &wsd);
  1. 创建并初始化一个WSAQUERYSET变量用于指定搜索参数,设置dwNameSpace成员为NS_BTH限制为查询蓝牙设备。
WSAQUERYSET wsaq;
ZeroMemory(&wsaq, sizeof(wsaq));
wsaq.dwSize = sizeof(wsaq);
wsaq.dwNameSpace = NS_BTH;
wsaq.lpcsaBuffer = NULL;
  1. 调用WSALookupServiceBegin函数来执行一个查询。
int iRet = WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup);
将LUP_CONTAINERS赋给dwFlags参数,启动SDP来搜索蓝牙设备。
注意     将dwFlags参数设为零将执行一个服务搜索。
WSALookupServiceBegin 函数返回一个句柄到hLookup参数中。
  1. 要枚举在上一步中调用WSALookupServiceBegin所找到的设备,就要使用WSALookupServiceNex函数。函数返回一个指向存有查询结果的WSAQUERYSET及构体。
    1. 设置一个WSAQUERYSET结构体来储存WSALookupServiceNext函数返回的设备数据。
CHAR buf[4096];
LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
pwsaResults->dwSize = sizeof(WSAQUERYSET);
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->lpBlob = NULL;
    1. 调用WSALookupServiceNext并将WSALookupServiceBegin返回的hLookUp参数传递给它。为了提高性能,对WSALookupServiceBegin 的调用只返回设备的地址并存储在内存中。要返回设备的名称和地址,就要将LUP_RETURN_NAME | LUP_RETURN_ADDR赋给dwFlags参数。
DWORD dwSize = sizeof(buf);
int iRet = WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults)
可以通过循环调用WSALookupServiceNext来枚举所有的设备。
  1. 调用WSALookupServiceEnd函数来结束设备搜索。这个函数将释放由WSALookupServiceBegin创建的lookup句柄。
WSALookupServiceEnd(hLookup);
  1. 要结束对Winsock服务的使用,调用WSACleanup函数。在程序中对每个成功调用的WSAStartup都必须对应地调用WSACleanup。
The following code example performs a device inquiry displays the device name in a user interface.
下面的代码执行了一次设备查询,并将设备名称显示在用户界面上。
//------------------------------------------------------------------------
// Function: PerformInquiry
// Purpose: Performs a device inquiry displays the device name in a user interface.
//------------------------------------------------------------------------
#define MAX_NAME 248
static BOOL PerformInquiry()
{
 WSAQUERYSET wsaq;
 HANDLE hLookup;
 union {
    CHAR buf[5000];
    double __unused; // ensure proper alignment
 };
 
 LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
 DWORD dwSize = sizeof(buf);
 BOOL bHaveName;
 ZeroMemory(&wsaq, sizeof(wsaq));
 wsaq.dwSize = sizeof(wsaq);
 wsaq.dwNameSpace = NS_BTH;
 wsaq.lpcsaBuffer = NULL;
 if (ERROR_SUCCESS != WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup))
 {
    wprintf(L"WSALookupServiceBegin failed %d/r/n", GetLastError());
    return FALSE;
 }
 
 ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
 pwsaResults->dwSize = sizeof(WSAQUERYSET);
 pwsaResults->dwNameSpace = NS_BTH;
 pwsaResults->lpBlob = NULL;
 while (ERROR_SUCCESS == WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults))
 {
    ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);
    BT_ADDR b = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
    bHaveName = pwsaResults->lpszServiceInstanceName && *(pwsaResults->lpszServiceInstanceName);
    wprintf (L"%s%s%04x%08x%s/n", bHaveName ? pwsaResults->lpszServiceInstanceName : L"",
    bHaveName ? L"(" : L"", GET_NAP(b), GET_SAP(b), bHaveName ? L")" : L"");
 }
 WSALookupServiceEnd(hLookup);
 return TRUE;
}

 
[Bluetooth API]使用Irprops库搜索蓝牙设备 [Bluetooth API]使用Irprops库搜索蓝牙设备   如果是csr芯片的适配器,本人查找了很多相关资料都说csr芯片的驱动需要自己的SDK库,winsock库搜索不到,后来亲身测试之前用winsocke确实没办法搜索到蓝牙设备,只能搜索到已经经过pin码验证了的蓝牙设备,因此,本人放弃了使用winsock库搜索蓝牙,改用蓝牙API函数,结果成功获取蓝牙信息,代码如下: // f 阅读详情

相关推荐

[Bluetooth(SDK)]使用WinSock搜索蓝牙设备

[Bluetooth(SDK)]使用WinSock搜索蓝牙设备 可以利用下面这些变成元素创建一个查询来搜索一定范围内的远程蓝牙设备:     WSAQUERYSET 结构体     WSALookupServiceBegin 函数     WSALookupServiceNext函数     WSALookupServiceEnd函数 1、提供Winsock的版本和实现细节的数据来

chuyi优快云的博客 963

关于winsock:网络位置感知服务提供商(NLA)

运行Microsoft Windows的个人计算机通常具有多个网络连接,例如连接到不同网络的多个网络接口卡(NIC),或物理网络连接和拨号连接。 Windows套接字能够在一段时间内枚举可用的网络接口,但以前无法获得有关网络连接的某些关键信息。 这包括诸如连接Windows计算机的逻辑网络或多个接口是否连接到同一网络的信息。 网络位置感知服务提供程序(通常称为NLA)使Windows套接字2应用...

一世豁然的专栏 2197

安卓APP蓝牙上位机的编写二——搜索附近蓝牙设备

安卓APP蓝牙上位机的编写二——搜索附近蓝牙设备 安卓开发之搜索附近所有的蓝牙设备,源代码附送。

weixin_42119432的博客 3978

[Bluetooth]查询远程设备上的服务

在程序中可以使用一下这些标准Winsock编程元素来查询远程设备上的服务: WSAQUERYSET 结构体 WSALookupServiceBegin 函数 WSALookupServiceNext函数 WSALookupServiceEnd函数 在查询远程设备上的服务性能之前,必须先知道一下信息: 要查询的远程设备的地址

JamesXing的专栏 2573

SwiftUI Bluetooth之macOS显示和搜索蓝牙设备

看完后您将能够制作下面的界面 实战需求 通过之前文章我们掌握SwiftUI构建蓝牙App的方法,那么macOS 平台该如何开发呢? 解决方案 SwiftUI 当初的设计理念就是 Write Once Run Anywhere,让我们来体验一下吧 下面iOS代码 import SwiftUI import CoreBluetooth class MyBluetooth:NSObject,CBCentralManagerDelegate,ObservableObject { @Published

iCloudEnd的博客 1201

Windows 蓝牙BLE调试工具

Windows BLE调试工具是一款运行在Windows下的BLE调试软件,实现了扫描、连接、获取BLE设备上的服务以及向服务写入和读取数据的功能。

c++ Winsock 搜索蓝牙

void GetBluetooth() { CString strVal(L""); CString strName(L""); // 初始化winsock WSADATA wsaData; if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { strVal.Format(L"WSAStartup failed with error code: %d", WSAGetLastError()...

Kyle 898

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

wince 蓝牙 操作 搜索蓝牙设备 建立连接 建立虚拟串口 MFC

我弄的时候 也看了下网络资料 多少有些缺陷  现在我把我整理好的 贴出来 一共 分为 3部分  bluetooth.H    bluetooth.cpp   使用说明 这几部分   1.bluetooth.h #ifndef BLUETOOTH_H #define BLUETOOTH_H #include "winsock2.h" #include "Ws2bth.h" typed

jilong17的专栏 4626

HMMER实战:从零部署到序列分析

本文详细介绍了HMMER工具的安装与使用,从源码编译到环境配置,再到核心工具hmmbuild、hmmsearch等的实战应用。通过球蛋白序列分析案例,展示了HMMER在生物信息学中的强大功能,帮助读者快速掌握序列分析技巧。

weixin_42529366的博客 250

【物联网】探索NE555:一款经典的集成电路(超详细)

NE555是一种集成电路,其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块,外部引脚则提供了与其他电路元件进行连接的接口。NE555的设计目的是为了提供一种简单方便的定时器解决方案,它广泛应用于模拟和数字电路中。NE555作为一款经典的集成电路,具备设计简单、易于使用和稳定可靠的特点,在电子领域发展了广泛的应用。从单稳态模式到多稳态模式,再到振荡器模式,NE555可以满足不同的需求,并且可以与其他电路元件灵活组合,扩展其功能。然而,需要注意的是NE555也有一些限制。

Goforyouqp的博客 6万+

Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法

如何使用windows蓝牙api搜索蓝牙设备可参考我的另外一篇文章

jirryzhang的博客 2万+

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO如何选?

本文深度解析了GelSight、DIGIT、Taxim、GelSlim和TACTO五款主流触觉传感器的技术原理与核心特性。通过对比视觉传感与电学传感两大技术路径,为机器人灵巧抓取、精密检测等应用场景提供清晰的选型决策指南,帮助开发者根据项目需求在分辨率、响应速度、集成度与成本之间找到最佳平衡。

Black的专栏 930

Android Bluetooth(一)——蓝牙的开启和搜索

当设备完成配对后,系统会保存关于该设备的基本信息(例如设备的名称、类和 MAC 地址),并且可使用 Bluetooth API 读取这些信息。但是,这两台设备仍保持绑定状态,因此在未来的会话期间,只要二者在彼此的范围内且均未移除绑定,便可自动重新连接。用户可通过系统设置将设备设为在有限的时间内处于可检测到状态,或者,应用可请求用户在不离开应用的同时启用可检测性。设备发现是一个扫描过程,它会搜索局部区域内已启用蓝牙功能的设备,并请求与每台设备相关的某些信息。回调的调用,其结果代码等于设备可检测到的持续时间。

tracy的博客 1万+

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

【WorkBuddy专栏61】字节的AI打法为什么一直在变——WorkBuddy/CodeBuddy vs 字节Trae/TRAE Work/豆包全维度对比

【WorkBuddy专栏61】字节的AI打法为什么一直在变——WorkBuddy/CodeBuddy vs 字节Trae/TRAE Work/豆包全维度对比

AI人人懂 2748

android bluetooth——蓝牙的开启、搜索、配对与连接

android 的blt仅仅支持api 18 android4.3以上,有的功能甚至需要api 19 android4.4; 所以我们在做blt项目之前一定要清楚可用的版本范围。我要讲述的是打开blt大门的操作。这些操作就是如何打开blt、如何搜索到其他设备、如何配对选中设备、如何通过mac地址连接之前已经配对过的设备以及连接成功的两个(或一对多个)设备如何通讯。在学习blt知识前要先搞清楚,bl

boolean的博客 9万+

【Bug已解决】codex: tool call timeout / Function execution exceeds limit — CodeX CLI 工具调用超时解决方案

CodeX CLI 工具调用超时(Bash/文件/MCP)的解决方案,含增加超时、拆分命令、后台运行、避免交互卡住与限制读取。

博客 4204

Bluetooth模块用于管理蓝牙设备,搜索附近蓝牙设备、实现简单数据传输

Bluetooth模块用于管理蓝牙设备,搜索附近蓝牙设备、实现简单数据传输

casey的博客 2974

CGAL AlphaShape算法(自适应Alpha值,二维版本)

CGAL AlphaShape算法(自适应Alpha值,二维版本)

dayuhaitang1的博客 2323

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android蓝牙开发系列之搜索蓝牙设备

关键一步 在开发蓝牙的第一步就是需要在manifest.xml文件中添加蓝牙的访问权限 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 第一行代码表示的是,允...

大雷哥 1382

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HarmonyOS实战开发-如何实现蓝牙设备发现、配对、取消配对功能。

蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。本示例通过@ohos.bluetooth 接口实现蓝牙设备发现、配对、取消配对功能。实现效果如下:

m0_70749039的博客 4582

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android蓝牙开发教程(一)——搜索蓝牙设备

Android蓝牙功能的开发一直是很多新手头疼的问题,网上虽然也有很多教程贴,但大多都写得不全面,不能让我们真正掌握蓝牙开发的基本知识。本教程主要讲解搜索蓝牙设备、蓝牙设备之间的连接和蓝牙之间的通讯三个主要模块。掌握了这三个,基本就能进行简单的蓝牙开发了。 先上效果图 界面比较简单。主要有三个按钮,两个文本和一个列表。三个按钮主要对应打开蓝牙,搜索设备和发送信息三个功能。两个文本主...

犀利的小牛 2万+

gnome-bluetooth-battery-indicator:实时显示蓝牙设备电量百分比

gnome-bluetooth-battery-indicator:实时显示蓝牙设备电量百分比 项目介绍 在现代生活中,蓝牙设备已经成为我们不可或缺的伴侣,无论是耳机、鼠标还是键盘,它们的电量管理变得尤为重要。gnome-bluetooth-battery-indicator 是一款专门为 Gnome-Shell 设计的扩展插件,它能够在系统托盘上实时显示连接的蓝牙设备的电池百分比,让用户能够轻松...

gitblog_01131的博客 762

蓝牙(2)用BluetoothAdapter搜索蓝牙设备示例

注意在搜索之前要先打开蓝牙设备 1 package com.e.search.bluetooth.device; 2 3 import java.util.Set; 4 5 import android.app.Activity; 6 import android.bluetooth.BluetoothAdapter; 7 import android...

banyinlve3147的博客 611
上一篇: [Bluetooth]查询远程设备上的服务
下一篇: [Bluetooth]使用WinSock连接到远程蓝牙设备
JamesXing
博客等级 码龄20年 30粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值