17

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

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

我们在 Windows XP 上运行。

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

蓝太阳

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

视窗

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

无线通信

昂贵且可能矫枉过正?更复杂的 API?想法?

在 SDK for C# 方面,正在看 Franson Bluetools,有人用过这个 API 吗?

谢谢

4

3 回答 3

18

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

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

所以这可能比我们想象的要简单......

我还使用 Andy Hume 的 OBEX 服务器使用他的 Brecham.Obex 库对其进行了测试,并发接收在那里也可以正常工作。它可从http://32feet.net/files/folders/objectexchange/entry6511.aspx获得。

在我们的 Widcomm 支持上。希望它在客户端看起来不会太“不完整”......查询(设备发现)和连接都可以工作。但是,服务器端仍然需要做一些工作,并且 Widcomm API 根本不支持某些东西,例如。(编程身份验证处理)。

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

于 2009-07-03T12:09:13.040 回答
5

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

2个加密狗为什么?

  1. 如果加密狗正在执行扫描,则传输速率会大大减慢
  2. 一个加密狗只能支持 7 个并发传输,如果你正在扫描,这个会下降到 6 个。如果你想同时发送、接收和扫描,一切都会变慢,非常糟糕,而且你的通道非常有限。

因此,我们的想法是运行一个加密狗连续扫描(以便设备尽快出现),另一个加密狗保留用于传输,并且由于它不扫描,传输既好又快。

我们使用的图书馆

经过大量测试和思考,我们最终选择了来自 BT 框架的 WirelessCommunicationLibrary

它支持 Widcomm、Windows、BlueSoleil 和东芝堆栈。它支持我们需要的所有服务器端的东西,是一个得到很好支持的商业产品,可以完美运行而不会出错。

哪个栈?

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

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

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

所以...我们将一个加密狗设置为 Widcomm 以反复扫描,一个加密狗设置为 Microsoft 设置为仅处理文件传输(输入和输出)。

让 2 个加密狗工作

我们选择使用 2 个相同的加密狗,我们可以批量订购它们,并将它们全部储存起来,减少混乱。每个出厂的设备只需要 2 个蓝牙适配器,简单。

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

概括

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

于 2009-11-26T09:44:09.960 回答
4

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

BTW:为什么你需要同时使用两个加密狗?通常单个加密狗最多可以处理同时连接的 7 个设备。

于 2009-06-29T08:59:16.493 回答