C#中的蓝牙,哪个堆栈,哪个SDK?

我们有一个应用程序需要能够使用蓝牙满足以下要求:

  1. 从蓝牙设备接收文件(同时最多2台设备)
  2. 显示范围内的所有蓝牙设备
  3. 将文件发送到蓝牙设备
  4. 扫描蓝牙设备并同时传输文件

我们在Windows XP上运行。

我做了一些环顾四周,似乎有3个主要堆栈:

BlueSoleil的

在BlueSoleil网站上,在他们的SDK部分中,似乎只提到支持1个连接,这显然不太好。

视窗

似乎只支持1个蓝牙加密狗,这可能意味着我们无法满足我们的所有要求。

WIDCOMM

昂贵且可能过度杀伤? 更复杂的API? 思考?

对于C#的SDK,正在考虑Franson Bluetools,有人使用过这个API吗?

谢谢

首先是免责声明,我是32feet.NET库的维护者。 🙂

我刚刚检查过,在XP上使用Microsoft堆栈(使用一个加密狗)我可以同时接收两个OBEX PUT并发现设备。 那是使用32feet.NET的ObexListener类和BluetoothClient.DiscoverDevices方法。 要发送OBEX PUT,可以使用其ObexWebRequest类。 要与ObexListener进行多个并行连接,我只需要多个线程调用其GetContext()方法。

所以这可能比我们想象的更简单……

我还使用他的Brecham.Obex库和Andy Hume的OBEX服务器测试了它,并且并发接收工作也很好。 它可从http://32feet.net/files/folders/objectexchange/entry6511.aspx获得 。

关于我们的Widcomm支持。 希望它在客户端看起来不太“不完整”……查询(设备发现)和连接都可以工作。 服务器端仍然需要一些工作,但Widcomm API有些东西根本不支持,例如。 (程序化认证处理)。

样品有什么问题? 编译时还是运行时? 在MSFT堆栈或Widcomm? 如果您愿意,可在http://32feet.net/forums/37.aspx进行跟进。

是时候解释我们最终做了什么……

2个加密狗为什么?

  1. 如果加密狗正在进行扫描,则传输速率会大幅减慢
  2. 加密狗只能支持7个并发传输,如果您正在进行扫描,则会降至6.如果您想同时发送,接收和扫描所有内容,一切都会变慢,严重,并且您的频道非常有限。

因此,我们的想法是连续扫描一个加密狗(因此设备尽可能快地出现),而另一个加密狗保留用于传输,因为它不是扫描,所以传输速度很快。

我们用的图书馆

经过多次测试和思考后,我们最终选择了BT框架的WirelessCommunicationLibrary 。

它支持Widcomm,Windows,BlueSoleil和Toshiba堆栈。 它支持我们需要的所有服务器端,是一个支持良好的商业产品,完美无误地工作。

哪个堆栈?

嗯,这是一个复杂的问题。 堆栈中没有一个同时支持2个加密狗。 所以唯一的选择是在一个堆栈上运行一个加密狗而在另一个堆栈上运行另一个加密狗。 这是WCL库派上用场的地方!

Microsoft – 如果在扫描期间发生错误,则整个堆栈通常会崩溃。 这不太理想! 您必须关闭并重新启动无线电设备,这需要时间并且容易出错。 但是…… Microsoft堆栈确实很好地处理文件传输。

Widcomm – Widcomm堆栈不适合文件传输。 有一些讨厌的小应用程序与Widcomm一起安装,它们一直试图从你的应用程序中获取控制权。 您可以杀死bttray.exe,这有帮助,但在传输过程中仍然会从堆栈中获得一些奇怪的行为。 我确信这可以解决,但由于Windows扫描效果不佳,因此使用Widcomm进行扫描是有意义的。

所以…我们有一个加密狗设置为Widcomm来反复扫描,一个设置为Microsoft的加密狗设置为仅处理文件传输(进出)。

让2个加密狗工作

我们开始使用2个相同的加密狗,我们可以批量订购它们并将它们全部存放起来以减少混乱。 每个出货的设备只需要2个蓝牙加密狗,简单。

唯一的问题是,这些是widcomm加密狗,我们在Windows堆栈上需要一个加密狗。 Windows不会将这些视为Windows加密狗,因此不会将它们注册为Windows堆栈。 所以…这是你可以对bt.inf文件进行的黑客攻击,使其识别Windows的加密狗。 然后你需要切换其中一个加密狗的驱动程序在Windows驱动程序上运行,你就完成了。

摘要

所以…我们一直有一个加密狗扫描,一个处理传输,每个都在不同的堆栈上,一切都运行良好。 这是我发现在Windows上顺利运行2个加密狗的唯一方法。 如果您有更好的建议,请发布!

试试这个: 32feet.NET 。 从版本2.4开始,除Windows堆栈外,它们还支持Widcomm堆栈。

顺便说一句:为什么你需要同时使用两个加密狗? 通常,单个加密狗可以同时处理多达7个设备。