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

本文介绍如何使用Winsock API进行蓝牙服务查询。通过初始化WSAQUERYSET结构体并调用WSALookupServiceBegin、WSALookupServiceNext及WSALookupServiceEnd函数,可以查询远程蓝牙设备上的服务。
在程序中可以使用一下这些标准Winsock编程元素来查询远程设备上的服务:
  • WSAQUERYSET 结构体
  • WSALookupServiceBegin 函数
  • WSALookupServiceNext函数
  • WSALookupServiceEnd函数
在查询远程设备上的服务性能之前,必须先知道一下信息:
  • 要查询的远程设备的地址,BT_ADDR类型,定义在Ws2bth.h中:
typedef ULONGLONG bt_addr, *pbt_addr, BT_ADDR, *PBT_ADDR;
注意为了使清晰起见,文中忽略了错误处理。
在远程蓝牙设备上执行服务查询
  1. 提供Winsock的版本和实现细节的数据来初始化caller application。可以通过调用WSAStartup函数来获得这个数据。
WSADATA wsd;
WSAStartup (MAKEWORD(1,0), &wsd);
  1. 通过设置WSAQUERYSET结构体来指定搜索参数。
WSAQUERYSET wsaq;
memset (&wsaq, 0, sizeof(wsaq));
wsaq.dwSize = sizeof(wsaq);
wsaq.dwNameSpace = NS_BTH;
wsaq.lpBlob = &blob;
wsaq.lpcsaBuffer = &csai;
设置dwNameSpace成员为NS_BTH将查询指定为蓝牙查询。
  1. 调用WSALookupServiceBegin函数初始化搜索,将第一步中创建的WSAQUERYSET变量传递给pQuerySet参数来指定搜索标准
int iRet = WSALookupServiceBegin (&wsaq, 0, &hLookup);
dwFlags参数设置为0来在远程设备上执行一个服务查询, WSALookupServiceBegin 返回一个句柄到hLookup参数中。
注意dwFlags参数设置为LUP_CONTAINERS, 调用 WSALookupServiceBegin将执行一个设备查询。详情参见“使用WinSock搜索蓝牙设备”。
  1. 要返回在远程设备上所找到的服务的相关数据,使用从WSALookupServiceBegin返回的句柄调用 WSALookupServiceNext函数。
CHAR buf[5000];
LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
DWORD dwSize= sizeof(buf);
memset(pwsaResults,0,sizeof(WSAQUERYSET));
pwsaResults->dwSize = sizeof(WSAQUERYSET);
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->lpBlob = NULL;
iRet = WSALookupServiceNext (hLookup, 0, &dwSize, pwsaResults);
WSALookupServiceNext返回了一个指向WSAQUERYSET的指针,它包含了lpBlob成员里的服务数据的引用。这个成员指向一个BLOB结构体,它包含了由WSALookupServiceNext一次性返回的二进制数据。 Windows CE提供了COM接口,你可以使用它们来分析服务数据。详情参见使用COM接口分析SDP记录.
调用WSALookupServiceEnd函数来结束设备搜索。这个函数将释放由WSALookupServiceBegin创建的lookup句柄。
WSALookupServiceEnd(hLookup);
要结束对Winsock服务的使用,调用WSACleanup函数。在程序中对每个成功调用的WSAStartup都必须对应地调用WSACleanup

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值