我正在尝试使用C#/ Visual Studio 2010构建一个Windows应用程序,它将执行以下功能(按顺序):对于蓝牙操作,我使用的是32feet.Net库函数 .
-
找到蓝牙设备并将其列在列表/组合框中供用户选择 . (我想允许用户选择多个设备,因此不会选择
SelectBluetoothDeviceDialog
类选项 . ) . 我可以通过BluetoothClient.DiscoverDevices()
获取设备列表,但是,它不是异步操作 . 如果可能的话,我想进行异步操作 . 我阅读了有关事件DiscoverDevicesProgress
和DiscoverDevicesComplete
以及方法DiscoverDevicesAsync
的BluetoothComponent
类,但无法使其正常工作 . 如果可能的话,请分享一个示例代码 . -
用户从列表中选择设备并单击'Pair'按钮 . 到目前为止,我可以通过
BluetoothSecurity.PairRequest
成功配对设备 . 这里没有问题 . -
用户现在从'paired'列表中选择一个/多个设备,然后单击'connect' . 在这里,我尝试使用
BeginConnect
(用于异步操作)和BluetoothClient
类的Connected
方法连接到设备但是获得以下异常 .
System.Net.Sockets.SocketsException:{“提供了无效参数000319002CC6:0000110100001000800000805f9b34fb”} .
上述异常中的数字是我使用 BluetoothService.SerialPort
传递的 Connected
方法所需的GUID号 . 这将失败,因为我的设备期望在COM7端口连接 . 我不知道如何在特定的COM端口连接/配对设备?是否可以通过32feet.Net库函数?如果是这样,请提供代码示例 .
参考注意:我已阅读并尝试实现下面有关StackOverflow的文章中解释的代码 . 但是,由于我的要求(允许用户在COM端口配对和连接多个设备),我无法运行相同的代码 . 但是,它确实有助于理解这个概念 . 32feet.net howto discover nearby bluetooth devices async in c#
请求您建议处理这种情况的最佳方法 . 如果我应该尝试使用32feet.Net以外的任何其他库/功能,请告诉我 .
我的最终目标是同时从连接的设备读取数据和向连接的设备写入数据 . 所以,截至目前,我只是试图通过蓝牙连接到特定的COM端口 .
此致,Rumit
===========================编辑:答案1的更新信息:
我收到了一个bluetooh设备(一个补丁),应该连接到TOSHIBA VIRTUAL BT COM端口 . 如果东芝的信息对于更好地回答这个问题是必要的,我道歉 . 我是与港口沟通的新手 . 到目前为止,我知道我需要使用COM7 . 我有一个用C语言构建的应用程序,它通过bluetooh连接到COM7上的相同补丁 . 但是,我没有源代码,并且我被要求在C#中实现相同的实用程序 . 从您的回复中,我可以假设C应用程序可能正在使用Windows套接字2吗?
另外,我可以在 BluetoothEndClient
中看到一个指定端口(整数值)值的选项,但这也没有用 . 所以,我假设端口不是COM,而是其他类型的端口 .
此致,Rumit
2 回答
简单地说就是现在 . 你似乎主要是在正确的方面 .
1)该错误可能是名称为'InvalidArgument'且代码为10022(检查
SocketException.SocketErrorCode
)的错误 .所以对于MSFT蓝牙堆栈它有意义(见http://32feet.codeplex.com/wikipage?title=Errors):
这意味着在连接的硬件级别出现问题,无论是加密狗本身还是这对设备都是错误通信的 . 它不是你要连接的Parani模块,是吗?
在蓝牙UI中手动配对,然后查看连接是否有效 .
2)你真的想要一个COM端口吗?我更喜欢使用Sockets和System.IO.Streams . COM端口很难设置,很难维护,也很难使用 . 只有当您拥有仅使用COM端口的第三方程序时,才需要使用它们 .
BluetoothClient不会创建COM端口,它使用套接字并返回一个Stream来读取和写入 .
我找到了一个使用WCL库成功连接到蓝牙设备的解决方案,如下所述 .
步骤1:将wclClient的Transpport属性设置为ctSerial .
步骤2:通过设置client.SerialParams.Port属性指定COM端口号 . 例如,
此致,Rumit