2013-03-12 236 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