32feet.net:如何通过BluetoothClient连接到特定的COM端口

时间:2013-03-12 23:08:17

标签: c# visual-studio-2010 bluetooth 32feet

我正在尝试使用C#/ Visual Studio 2010构建一个Windows应用程序,它将执行以下功能(按顺序):对于蓝牙操作,我使用32feet.Net库函数。

  1. 找到蓝牙设备并将其列在列表/组合框中供用户选择。 (我想允许用户选择多个设备,因此不会选择SelectBluetoothDeviceDialog类选项。)。我可以通过BluetoothClient.DiscoverDevices()获取设备列表,但是,它不是异步操作。如果可能的话,我想进行异步操作。我了解了BluetoothComponent类,其中包含事件DiscoverDevicesProgressDiscoverDevicesComplete以及方法DiscoverDevicesAsync,但无法使其正常运行。如果可能的话,请为此分享一个示例代码。

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

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

  4.   

    System.Net.Sockets.SocketsException:{“无效的参数是   供应000319002CC6:0000110100001000800000805f9b34fb“}。

    上述异常中的数字是我使用Connected传递的BluetoothService.SerialPort方法所需的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 个答案:

答案 0 :(得分: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模块,是吗?

在蓝牙用户界面中手动配对,然后查看连接是否有效。

2)你真的想要一个COM端口吗? 我更喜欢使用Sockets和System.IO.Streams。 COM端口很难设置,很难维护,也很难使用。只有当您拥有使用COM端口的第三方程序时才需要使用它们。

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

答案 1 :(得分: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