如何通过蓝牙客户端连接到一个特定的COM端口

本文关键字:一个 端口 COM 何通过 客户端 连接 | 更新日期: 2023-09-27 18:03:48

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

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

  2. 用户从列表中选择设备,点击"配对"按钮。到目前为止,我可以通过BluetoothSecurity.PairRequest成功配对设备。

  3. 用户现在从"配对"列表中选择一个/多个设备并单击"连接"。在这里,我试图使用BeginConnect(异步操作)和BluetoothClient类的Connected方法连接到设备,但得到以下例外。

System.Net.Sockets。SocketsException:{"一个无效的参数是提供000319002 cc6:0000110100001000800000805f9b34fb"}。

上述异常中的数字是我使用BluetoothService.SerialPort传递的Connected方法所需的GUID号码。这将失败,因为我的设备期望在COM7端口连接。我不确定如何在特定的COM端口连接/配对设备?甚至可能是32英尺。Net库功能?如果有,请提供一个代码示例。

注意:我已经阅读并尝试实现下面关于StackOverflow的文章中解释的代码。然而,由于我的要求(允许用户在COM端口配对并连接到多个设备),我无法运行相同的代码。然而,它确实有助于理解这个概念。如何在c#中同步发现附近的蓝牙设备

请求您建议处理这种情况的最佳方法。万一我应该尝试使用除32英尺以外的任何其他库/函数。请务必让我知道。

我的最终目标是读取和写入数据从连接的设备(s)。所以,到目前为止,我只是试图通过蓝牙在特定的COM端口上连接。

问候,Rumit

===========================编辑:更新答案1的信息:

我收到了一个蓝牙设备(补丁),应该连接到TOSHIBA VIRTUAL BT COM端口。如果东芝的信息是为了更好地回答这个问题所必需的,我深表歉意。我不熟悉与港口的沟通。到目前为止,我知道我需要使用COM7。我有一个内置在c++中的应用程序,它通过蓝牙连接到COM7上的相同补丁。然而,我没有源代码,我被要求在c#中实现相同的实用程序。从你的答复,我可以假设c++应用程序可能使用Windows套接字2的任何机会?

另外,我可以看到在BluetoothEndClient中指定端口(整数值)值的选项,但这也不起作用。因此,我假设该端口不是COM,而是其他类型的端口。

问候,Rumit

如何通过蓝牙客户端连接到一个特定的COM端口

刚才简单说一下。你的话似乎基本上是对的。

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端口吗?我非常喜欢使用socket和System.IO.Streams。COM端口很难设置,很难维护,也很难使用。只有当你有一个第三方程序,只有使用COM端口时,你才需要使用它们。

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

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

Step1:将wclClient的transport属性设置为ctSerial.

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

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

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

问候,Rumit