2013-03-12 238 views
0

我想用C#/ Visual Studio 2010构建一个windows应用程序,它将执行以下功能(按顺序):对于蓝牙操作,我使用32feet .Net库功能。32feet.net:如何通过BluetoothClient连接到特定的COM端口

  1. 查找蓝牙设备并将它们列出在列表/组合框中供用户选择。 (我想允许用户选择多个设备,因此不适用于SelectBluetoothDeviceDialog类选项。)。我可以通过BluetoothClient.DiscoverDevices()获得设备列表,但它不是异步操作。如果可能的话,我想去异步操作。我读了关于BluetoothComponent类与事件DiscoverDevicesProgressDiscoverDevicesComplete和方法DiscoverDevicesAsync,但不能得到它的工作。如果可能的话,请分享一个示例代码。

  2. 用户从列表中选择设备并单击“配对”按钮。到目前为止,我可以通过BluetoothSecurity.PairRequest成功配对设备。这里没有问题。

  3. 用户现在从“配对”列表中选择一个/多个设备并单击“连接”。在这里,我尝试使用BeginConnect(用于异步操作)和Connected类的BluetoothClient类的方法连接到设备,但遇到异常。

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更新的信息:

我收到了应该连接到TOSHIBA VIRTUAL BT COM端口的bluetooh设备(补丁)。我很抱歉,如果东芝的信息对于更好地回答这个问题是必要的。我是与港口沟通的新手。到目前为止,我知道我需要使用COM7。我有一个使用C++构建的应用程序,它通过bluetooh连接到COM7上的相同补丁。但是,我没有源代码,并且我被要求在C#中实现相同的实用程序。从你的回复中,我可以假设C++应用程序可能会使用Windows Sockets 2吗?

此外,我可以看到一个选项来指定BluetoothEndClient中的端口(整数值)值,但这也不起作用。所以,我认为端口不是COM,是其他类型的端口。

问候, Rumit

回答

0

我发现了一个解决方案,可以使用WCL库成功连接到蓝牙设备,如下所述。

第1步:将wclClient的Transpport属性设置为ctSerial。

client.Transport = wclClientTransport.ctSerial; //This makes the wclClient to listen to the COM ports. 

第2步:通过设置client.SerialParams.Port属性指定COM端口号。例如,

client.SerialParams.Port = 5; // For COM5 

问候, Rumit

0

只是短暂刚才。你似乎主要是在正确的路线。

1)该错误大概是名称为'InvalidArgument'且代码为10022(检查SocketException.SocketErrorCode)的错误。

所以对于MSFT蓝牙堆栈它的意义(见http://32feet.codeplex.com/wikipage?title=Errors):

"Plug and Play, driver-stack event, or other error caused failure." 

因此,这意味着有些事情是在与连接硬件层面走错了,或者与狗本身或对设备错误通信。这不是你连接到的Parani模块,是吗?

在蓝牙UI中手动配对,然后查看连接是否正常工作。

2)你真的想要一个COM端口吗? 我非常喜欢使用套接字和System.IO.Streams。 COM端口很难设置,很难维护,而且很难使用。只有当你有第三方程序只有使用COM端口,你应该需要使用它们。

BluetoothClient不会创建COM端口,它使用套接字并返回一个Stream来读取和写入。

+0

我已经更新了我原来的职位以获得更多信息。让我知道这是否有帮助。另外,关于错误代码,我随机收到两个错误:10058:Socket被关闭错误(可能是由于无效的端口)和10022。 – 2013-03-13 17:39:40

+0

我发现我可以使用WCL库。但是,在这一点上,我没有看到指定COM端口的选项。万一你能提供任何使用WCL的帮助,请告诉我。 – 2013-03-13 22:50:11