0

目前我正在用 C# 2010 编程 USB 蓝牙加密狗。我想以一种自动与找到的蓝牙设备配对的方式进行编程。我不希望用户在手机和 Windows 7 中手动接受配对请求。我正在使用我的手机 (X Peria S) 进行测试。这种编程方法可行吗?我尝试使用蓝牙的 32feet.net 库对此进行编码,这是我的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using InTheHand.Net;
using InTheHand.Net.Bluetooth;
using InTheHand.Net.Sockets;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

    private Guid service = BluetoothService.BluetoothBase;
    private BluetoothClient bluetoothClient;




    public Form1()
    {
        InitializeComponent();
    }

    private void Search_Bluetooth(object sender, EventArgs e)
    {
        BluetoothRadio.PrimaryRadio.Mode = RadioMode.Discoverable;
        bluetoothClient = new BluetoothClient();
        Cursor.Current = Cursors.WaitCursor;

        BluetoothDeviceInfo [] bluetoothDeviceInfo = bluetoothClient.DiscoverDevices(10);
        comboBox1.DataSource = bluetoothDeviceInfo;
        comboBox1.DisplayMember = "DeviceName";
        comboBox1.ValueMember = "DeviceAddress";
        comboBox1.Focus();
        Cursor.Current = Cursors.Default;
    }

    private void Pair(object sender, EventArgs e)
    {
        if (comboBox1.SelectedValue != null)
        {
            try
            {
                bluetoothClient.Connect(new BluetoothEndPoint((BluetoothAddress)comboBox1.SelectedValue, service));
                MessageBox.Show("Connected");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);


            }
        }
    }
}
}

当我运行这个项目时,我看到了周围的蓝牙设备列表,但是当我想与之配对时,我会提示“连接尝试失败,因为连接方在一段时间内没有正确响应

我认为问题出在 私人 Guid 服务 = BluetoothService.BluetoothBase但我不确定,我是否使用正确的服务 .BluetoothBase与我的手机配对?

是否有任何现有的解决方案?非常感谢任何帮助和建议。

谢谢。

4

2 回答 2

1

您必须知道在身份验证期间将请求的加密狗的 PIN。

如果您想连接到例如移动蓝牙 RS-232 加密狗,您必须知道 PIN,但由于缺少用户界面,您不必接受远程设备(RS-232 加密狗)上的连接. 但在手机上,你必须这样做。

我写了如下界面:

interface IStackAdapter
{
    IList<IRemoteBTDevice> DiscoveredDevices { get; }
    void LoadStack();
    void DoInquiry();
    void DoConnection(IRemoteBTDevice rd);
    void ReleaseLink();
}

接下来,我为每个不同的蓝牙堆栈实现了该接口。这是 Widcomm 堆栈的连接:

/// <summary>
/// Connects to a remote device.
/// </summary>
/// <param name="rd">Remote device that the adapter is supposed to connect to.</param>
public void DoConnection(IRemoteBTDevice rd)
{
    BluetoothAddress remoteAddress = new BluetoothAddress(Convert.ToInt64(rd.Id, 16));
    BluetoothDeviceInfo bdi = new BluetoothDeviceInfo(remoteAddress);

    try
    {
        if (!bdi.Authenticated)
        {
            string pair = rd.Pin; /* PIN for your dongle */
            bool paired = BluetoothSecurity.PairRequest(bdi.DeviceAddress, pair);
        }
    }
    catch (Exception ex)
    {
        //Log and rethrow
    } 
}
于 2013-05-10T15:40:57.063 回答
0

如果您使用 Windows Phone,您可以使用 Windows Phone 中的 PeerFinder 进行连接:

PeerFinder.AlternateIdentities["Bluetooth:PAIRED"] = "";
        var available_devices = await PeerFinder.FindAllPeersAsync();
        HostName hostName = null;
        for (int i = 0; i < available_devices.Count; i++)
        {
            PeerInformation dispositivo = available_devices[i];
            if (dispositivo.DisplayName.ToUpper() == /*Name of you device */)
            {
                hostName = dispositivo.HostName;
                break;
            }
        }
        if (hostName != null)
        {
            var socket = new StreamSocket();
            await socket.ConnectAsync(hostName, "1");
        }
于 2015-07-19T00:42:34.970 回答