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

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

我们运行的是 Windows XP。

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

蓝太阳

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

视窗

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

维德康

昂贵且可能过度杀伤力?更复杂的API?想法?

就 C# 的 SDK 而言,正在查看 Franson Bluetools,有人使用过这个 API 吗?

谢谢

有帮助吗?

解决方案

首先是免责声明,我是 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 如果你更喜欢。

其他提示

是时候准确解释我们最终做了什么......

2个加密狗为什么?

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

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

我们使用的库

经过多次测试和思考,我们最终选择了 BT 框架的无线通信库.

它支持 Widcomm、Windows、BlueSoleil 和 Toshiba 堆栈。它支持我们需要的所有服务器端内容,是一个得到良好支持的商业产品,可以完美运行,不会出现错误。

哪个堆栈?

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

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

维德康 - Widcomm 堆栈不太适合文件传输。有一些讨厌的小应用程序随 Widcomm 一起安装,它们不断试图从您的应用程序中获取控制权。您可以终止 bttray.exe,这会有所帮助,但在传输过程中您仍然会从堆栈中看到一些奇怪的行为。我确信这个问题可以解决,但由于 Windows 的扫描能力较差,因此使用 Widcomm 进行扫描是有意义的。

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

让 2 个加密狗正常工作

我们选择使用 2 个相同的加密狗,我们可以批量订购并存储它们,从而减少混乱。每台设备只需要 2 个蓝牙适配器,很简单。

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

概括

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top