相信以下回复对话会让你解开微软winsock API开发PC端蓝牙方面疑惑
星期三, 2006-10-18 10:32 — qyb

作为项目 MobileSync 的一部分,我计划增加对蓝牙通信的支持。结果经过一段时间的尝试,我发现 Win32 平台上针对蓝牙开发简直太让人郁闷了。

红外的支持看 MSDN 的文档下很容易就完成了,所以我也首先去参考 MSDN 上蓝牙相关的部分,结果在创建一个 BTH 的套接字的时候返回了 10047 错误——"Address family not supported by protocol family"。接下来从网上搜索得知这是因为我的机器上还没有安装本机协议栈(native bluetooth stack)的缘故。太奇怪了,我明明已经安装了驱动并可以传送文件啊,为什么说我不支持蓝牙?

再进一步查找,这才知道在 Windows XP SP1 之前,微软是不支持蓝牙的。直到 SP2,native stack 也仅仅支持少数的几种设备。可以想象蓝牙刚刚问世的时候,微软的反应是:“谁知道这项技术会不会最终成功,俺先等等看吧”。于是后来 IVT 和 Widcomm先后开发了自己的协议栈和管理应用程序,来配合蓝牙外设在 Win32 平台上的使用。而我的蓝牙适配器的问题就是,它可以在 IVT 下工作,但 SP2 不支持(ISSC 芯片)。

对于蓝牙软件开发商来说,问题就很棘手。市场上有三种协议栈,最好是全都支持以适应最大可能的应用范围。我现在才明白为什么我的 Nokia 3650 的 PC 同步程序无法用蓝牙通信,这是因为它用的 mRouter 协议层只支持 Widcomm 和 Native,不支持设备附带的 IVT 驱动。

后来还找到 Jon Cellini 的一篇文章,描述如何让并没有被 MS 官方支持的设备在 native 协议栈下工作的。虽然有人报告他的 ISSC 设备可以如法炮制,但我的适配器却不能这样去工作。

为了能继续我的开发工作,我只好重新买了一个 CSR 芯片的适配器。很便宜,不过 50 元(加上快递费),芯片版本还是 BlueCore4-ROM,似乎能支持蓝牙 2.0。它很顺利就在 XP 下自动检测出来了,同时"Control Panel"里面多了一个"Bluetooth Devices"的控件。然后我就发现微软缺省的管理程序比 IVT 差太多了,很明显 Microsoft Native Stack 将是未来开发的主流,但要想得到用户的广泛应用,还差一套完善的设备管理程序。不知道未来是 Vista 去改进,还是独立的第三方厂商做开发。

故事讲完了,如果你计划购买蓝牙适配器,我建议还是选择一个 SP2 官方支持的,比如 CSR 就挺好。市场上的主流好像是 ISSC,它的确更便宜一些,但我不敢保证 SP3 或者 Vista 就一定会支持..

最后要说的是,从这个事例里面看到,微软对外设的支持也就那么回事情,Linux 的 BlueZ 栈好像在 2.4.x 时代就确定了主流地位,是不是未来对新型硬件的支持以后 linux 的优势会越来越明显?

  • 技术
  • qyb's blog
  • 添加新评论

评论

星期一, 2009-02-23 16:45 — ysj (未验证)

你好,我是一名学生,我现在也在进行蓝牙的开发,开发环境选择

你好,我是一名学生,我现在也在进行蓝牙的开发,开发环境选择的是:
系统 xp sp2 , 安装了 xp sp2的platform sdk, 用的是visual studio 2005中的C++ ,选择的是MFC的程序, 蓝牙适配器选择了 世纪飞扬 的 ,我拆开看了下,芯片是ISSC的, 然后我将蓝牙适配器插入电脑的USB口, 想发现一个蓝牙模块(这个是CSR芯片的),程序中写入:WSALookupServiceBegin的时候,出现了错误,10108:此服务不存在. 不知道是什么原因, 看了你的文章, 是不是微软的sdk不支持ISSC的芯片?还是什么别的原因?

我在网上下了一个BlueSoleil的软件,就可以用来发现周围的蓝牙模块(CSR芯片的),而且配对,传输都没有问题

  • 回复

星期一, 2009-02-23 17:48 — qyb

应该是第一次插入支持的蓝牙设备的时候,xp

应该是第一次插入支持的蓝牙设备的时候,xp 才去安装相对应的蓝牙服务

  • 回复

星期一, 2009-02-23 22:31 — ysj (未验证)

你好,我今天又重新查了下,微软的xp上开发蓝牙通信还是用c

你好,我今天又重新查了下,微软的xp上开发蓝牙通信还是用csr芯片的适配器最好,但是有个问题又来了,就是关于csr适配器的选型问题,我不想购买很小的(因为太小,所以我不放心),不知道楼主用的是什么型号的蓝牙适配器, 还有个问题就是 多普达手机中的蓝牙芯片是什么型号的呢?

  • 回复

星期二, 2009-02-24 08:25 — qyb

我的适配器,也就口香糖那么宽,小拇指那么长,不知道你觉得它

我的适配器,也就口香糖那么宽,小拇指那么长,不知道你觉得它的大小如何

多普达手机里的蓝牙芯片?我也不知道,你是想在 WinCE 上开发吗?我觉得应该是 native stack 的吧..

  • 回复

星期二, 2009-02-24 09:07 — ysj (未验证)

那谢谢了!! ^_^

那谢谢了!!

^_^

  • 回复

星期四, 2008-03-13 00:15 — Anonymous (未验证)

你好,看了你的博客

你好,看了你的博客,现在对蓝牙了解更多了,谢谢!

我们现在正在做的是在PC端读取蓝牙发送过来的数据,我下载了Widcomm的SDK,但是编译的时候提示:
error LNK2001: unresolved external symbol _GUID_BLUETOOTH_RADIO_OUT_OF_RANGE
WidcommSdklib.lib(MSUtils.obj) : error LNK2001: unresolved external symbol _GUID_BLUETOOTH_RADIO_IN_RANGE
WidcommSdklib.lib(MSUtils.obj) : error LNK2001: unresolved external symbol _GUID_BLUETOOTH_PIN_REQUEST
WidcommSdklib.lib(MSUtils.obj) : error LNK2001: unresolved external symbol _GUID_BLUETOOTH_L2CAP_EVENT
WidcommSdklib.lib(MSUtils.obj) : error LNK2001: unresolved external symbol _GUID_BLUETOOTH_HCI_EVENT

但是这些GUID_BLUETOOTH_RADIO_IN_RANGE之类的在widcomm说明里边没有定义呢,反而在MS的SDK里可以找到蛛丝马迹,那么是不是在使用Widcomm进行开发的时候还需要安装微软的SDK呢?可否给小弟一些建议或者帮助,谢谢了!

  • 回复

星期五, 2008-03-14 21:05 — qyb

我看了一下 widcomm SDK

我看了一下 widcomm SDK 的 README,好像它现在有一种 Vista Pack 模式,就是说基于 windows native stack 来封装

你可能就是属于这种情况。。。
查查文档吧,看看怎么使用兼容 5.x SDK 的模式

  • 回复

星期二, 2006-10-31 17:30 — cmopy (未验证)

我目前也在做有关蓝

我目前也在做有关蓝牙软件的开发,涉及了两个协议栈:微软和widcomm。看了下你写的文章,想和你交流一下。
不知你对蓝牙配对了解的多不多,蓝牙通信两端,server端运行wince,使用微软蓝牙栈,client端是pc机,运行winxp,使用widcomm蓝牙栈,可否让蓝牙的配对过程自动化?即不用人工输入PIN码。
我测试过,server端我可以预先为请求连接的设备设置好PIN,但client端却不能编程设置好,需要在请求连接时手工输入。伪代码如下:
server:
---------
create socket
bind
listen
accept
if (connected)
{
set authenticate able
set pin
set authenticate
}

client:
--------
start inquiry
start discovery
openclient

这里server的authenticate设置是在accept连接成功后才执行的,在执行到setauthenticate时会要求client端输入PIN,但要手工输入。查阅widcomm的sdk文档,只发现有个Bond方法的参数可指定了PIN值,但是,如果在client端运行Bond,server的accept却接收不到请求,相反是系统弹出了一个对话框要求输入PIN,我觉得可能原因是两端的accept、Bond工作在不同的协议层上,所以,server的accept会收不到client的Bond请求。
想问问你有无类似的测试和经验分享分享。

  • 回复

星期三, 2006-12-13 09:12 — jonason (未验证)

我想问下,我用的是iv

我想问下,我用的是ivt的驱动,是不是不能用Msdn里面的socket建立的方法来建立socket,还有什么办法吗?是不是要从底层的驱动开始动手,如果你看到这个帖的话,加我msn好吗?大家交流下:jonason123@hotmail.com

  • 回复

星期三, 2006-12-13 13:14 — qyb

MSDN

MSDN 里面的方法肯定是不能用滴。

ivt 网站上可下载 SDK

  • 回复

星期四, 2006-12-14 11:03 — Jonason (未验证)

那我还想问下,我现

那我还想问下,我现在想实现简单的pc和ppc之间的通信,就是pc可以给ppc发消息,类似于普通的socket,要通过蓝牙的话,又几种方法呢?(我不考虑pc端用的是什么驱动,就是说任何驱动我都可以用蓝牙实现pc和ppc之间的通习)

  • 回复

星期四, 2006-12-14 11:11 — qyb

如果你只是在 PPC

如果你只是在 PPC 开发,应该可以不考虑 PC 的驱动,毕竟创建物理链路、传输数据通信这部分是标准的。PPC 上的驱动应该是 MS 标准的吧..

如果是 PC 的话就必须考虑驱动了

  • 回复

星期二, 2006-10-31 22:38 — qyb

从你描述的情况在,

从你描述的情况在,我觉得问题在于目前 Widcomm 和 MS 提供的 API 不支持的缘故。你现在调用的 API 都是接受到另一方请求 PIN 后的缺省行为就是弹出一个对话框。

accept/Bond 应该是两种不同的通信过程(严格来说,你所说的不同的协议层的提法是错误的),都是主动请求对方响应 PIN

我最近一段时间比较忙,一直也没有去继续研究蓝牙。我现在能想到的就是询问 widcomm 关于 API 的情况;或者是不要用 native 的 Bluetoothxxxxxxx 系列 API 族,而是用 socket 去完成通信. 不知道我的猜想是不是对的...

  • 回复

星期三, 2006-11-01 09:40 — cmopy (未验证)

微软提供的基于winsock

微软提供的基于winsock的蓝牙接口是在RFCOMM协议层之上实现的,而widcomm的Bond()却不是RFCComm的C++类的成员函数,所以我猜想是由于两个函数工作在不同的层上,不知这样说法对不对。
感谢你的答复,微软提供的接口真不好用,感觉麻烦死了,我想在连接前获取本地的蓝牙地址也比较困难,好像WSALookupServiceBegin/Next/End函数族可以获取本地地址,但不知是不是调用不对,读取不到,执行这个函数也要一点耗时,不爽。

  • 回复

星期三, 2006-11-01 10:51 — cmopy (未验证)

用微软的WSALookupServiceB

用微软的WSALookupServiceBegin/Next/End函数族已可以读到本地的蓝牙地址,微软的sdk文档有某些错误,原来的用法不对。
通过WSALookupServiceBegin的返回来判断蓝牙是否已插好,但这个函数需要一点延时等待,使用感觉不好,不知是否会有更好的办法判断蓝牙是否已插上。

  • 回复

星期三, 2006-11-01 16:20 — cmopy (未验证)

找到了更好的办法Bluet

找到了更好的办法BluetoothFindFirstRadio/BluetoothGetRadioInfo来判断蓝牙是否已插好,可以动手封装这两个开发包了。

  • 回复

对微软winsock PC端开发蓝牙疑问相关推荐

  1. auto.js id为参数滑动_【Autojs教程】02Autojs PC端开发调试环境搭建

    [Autojs教程]02-Autojs PC端开发调试环境搭建 写在前面 本篇教程算是保姆级教程了,希望以此能吸引更多感兴趣的同学学习Autojs,也希望大家能因此碰撞出更多的奇思妙想 关注微信公众号 ...

  2. 网站运营手册_网站建设PC端开发

    网站建设系统开发,网站建设PC端开发,网站建设APP开发,网站建设软件开发,网站建设平台开发,网站建设模式开发,网站建设源码开发,网站建设商城开发PC.WAP.微信.小程序APP五站合一网站管理系统是 ...

  3. 钉钉微应用PC端开发

    钉钉微应用PC端踩得坑一 作为一个开发过钉钉E应用的人来说 开发PC端真是恶心他妈抱着恶心哭了,猝不及防的就会给你一个大水泡子 在开发之前一定要有PC端开发工具 找半天都没找到,最后咨询了钉钉的技术支 ...

  4. 普通pc端开发与移动端开发区别

    1,普通pc端开发与移动端开发区别. 普通pc端开发,我理解就是你拿电脑打开的网页都算[这不是废话么]. 那么移动端前端开发工程师,说白了就很好理解了,做手机网页的前端开发工程师. 这么一比,是不是感 ...

  5. QtQuick PC端开发实战_专栏总目录

    总目录 序号 标题 等级 技术点 传送门 1 QtQuick PC端开发实战系列(1)_搭建开发环境(Windows) ★☆☆☆☆☆☆☆☆☆ 环境 goto 2 QtQuick PC端开发实战系列(2 ...

  6. 为什么手机棋牌游戏开发比PC端开发要复杂?

    现在大家都习惯用手机娱乐,电脑逐渐被淘汰,为了顺应这股趋势,各大棋牌游戏开发商开始钻研于手机棋牌游戏开发,尽最大的努力做到精益求精.摩天游科技十年开发经验告诉大家,一款手机游戏的开发,技术上的问题往往 ...

  7. 移动端开发、各种兼容问题、响应式布局开发、移动端和PC端开发的不同

    文章目录 一.移动端开发 二.移动端开发和PC端开发的不同 1.@1 响应式布局开发 2.关于CSS3的兼容 3.关于ES6+的兼容 4.还有一些移动端独有的兼容问题: 三.DPR:屏幕像素密度比「高 ...

  8. H5和PC端开发差异对比

    移动端开发现状 移动web 开发指的是需要适配移动设备的网页开发 移动web开发与pc端web开发没有本质的区别,使用的还是HTML/CSS/JavaScript的技术 移动端与pc端 web开发的区 ...

  9. 如何查询PC端的蓝牙Bluetooth版本

    1. 进入设备管理器 2. 进入Bluetooth列表,右键打开Inter(R) Wireless Bluetooth(R)的properties 3. 查看信息: Advanced-> Fir ...

  10. QtQuick PC端开发实战系列(18)_自定义Switch

    总目录传送门 本博文技术等级: ★★☆☆☆☆☆☆☆☆ 我们先看看原始的switch什么效果 https://doc.qt.io/qt-5/qml-qtquick-controls2-switch.ht ...

最新文章

  1. Android官方开发文档Training系列课程中文版:通知用户之构建通知
  2. Tomcat企业级应用
  3. 用户交互php源码,phpWebSite ,容许个人和群组用户很容易地维护一个交互式社区驱动的站点.phpWebSite...
  4. spring boot+shiro中使用@RequiresRoles不生效,访问报错404
  5. 分享一款最近比较火爆的宝石迷情游戏游戏源码安卓版
  6. 65种GPU性能测试,AMD开源驱动领先!
  7. scrapy读取mysql数据库_python3实战scrapy获取数据保存至MySQL数据库
  8. linux下使用yum安装Apache+php+Mysql+phpMyAdmin
  9. 手机linux比windows省电,为什么win10比ubuntu省电?
  10. mysql limit 1 10000_Mysql面试题,优化:SELECT * FROM user LIMIT 10000,1.
  11. hbase动态更改行键设计_nosql – HBase行键设计,用于单调递增键
  12. C++入门系列博客二 C++ 控制流
  13. 21. 合并两个有序链表
  14. java实现图片的预览_Java实现图片裁剪预览功能
  15. 在开发板运行可执行文件,报错 Syntax error: word unexpected (expecting “)“)
  16. mysql数据库商户与买家_基于mysql实现离我最近的商家列表
  17. 2. 确定地球与金星之间的距离 天文学家在1914年8月份的7次观测中,测得地球与金星之间距离(单位:米),并取其常用对数值,与日期的一组历史数据如下表:
  18. CV领域的对比学习综述(下)
  19. 修改mc服务器名字,好听的mc服务器名字
  20. java实现整理药名

热门文章

  1. 软件测试行业中ta表示什么意思,软件测试架构师(TA)的职位特点
  2. 8.用C/C++实现一个科学计算器———(超级详细完整,包含C/C++版本和Qt版本)
  3. 统计学中cv表示什么_cv是什么意思
  4. mysql error1205 博客_mysql主从复制Error1205
  5. qml中Popup元素的 aboutToShow和 opened()的区别
  6. vcard文件怎么导入手机_如何在Outlook 2013中将联系人导出到vCard(.vcf)文件或从vCard文件导入联系人...
  7. markdown语法的使用
  8. java 读取文件inputstream_使用Inputstream读取文件
  9. mand-mobile 组件库 tab-bar组件滚动问题
  10. 微信小程序中类似后台添加商品规格的设置