Невозможно подключить устройство Bluetooth с помощью c # - PullRequest
0 голосов
/ 25 февраля 2019

Я использую 32-футовую библиотеку для разработки приложения WPF для связи по Bluetooth, и могу подключить устройство, но не работаю для его подключения, и в результате возникло исключение, как показано ниже.

Примечание: IЯ пытался соединить устройства, такие как мой мобильный телефон и мой компьютер, но оба они выдают те же ошибки, как описано ниже.

Я где-то видел об этой проблеме, и они упоминали, как, эта проблема можетиз-за того, что 32-футовая библиотека не совместима с устройством Bluetooth, которое есть на моем ПК.

Но на самом деле я проверил это на некоторых других компьютерах, работающих под управлением ОС Windows 7 - 64-разрядных иполучаю то же сообщение об ошибке.

Кто-нибудь, помогите мне.Спасибо.

Сообщение об ошибке: Запрошенный адрес недопустим в своем контексте ECD09F51114A: 0000110100001000800000805f9b34fb

Exception Details:

Мой пример кода:

Guid uId = new Guid("0000110E-0000-1000-8000-00805f9b34fb");
bool receiverStarted = false;
private List<BluetoothDeviceInfo> deviceList;
private List<string> deviceNames;
private BluetoothDeviceInfo deviceInfo;
private string myPin = "1234";
private BluetoothClient sender;

private void BtnScan_Click(object sender, RoutedEventArgs e)
{
    ScanAvailableDevices();
}
private void ScanAvailableDevices()
{
    lstAvailableDevices.ItemsSource = null;
    lstAvailableDevices.Items.Clear();
    deviceList.Clear();
    deviceNames.Clear();
    Thread senderThread = new Thread(new ThreadStart(Scan));
    senderThread.Start();
}

private void Scan()
{
     UpdateStatus("Starting scan...");
     sender = new BluetoothClient();
     availableDevices = sender.DiscoverDevicesInRange();
     UpdateStatus("Scan completed.");
     UpdateStatus(availableDevices.Length.ToString() + " device(s) discovered");

     foreach(BluetoothDeviceInfo device in availableDevices)
     {
        deviceList.Add(device);
        deviceNames.Add(device.DeviceName);
     }

     UpdateAvailableDevices();  
}

private void UpdateAvailableDevices()
{
    Func<int> devicesDelegate = delegate ()
            {
                lstAvailableDevices.ItemsSource = deviceNames;
                return 0;
            };

            Dispatcher.BeginInvoke((Action)(() =>
            {
                devicesDelegate.Invoke();
            }));
 }

private void PairDevice()
        {
            deviceInfo = deviceList[lstAvailableDevices.SelectedIndex];
            if (CanPair())
            {
                UpdateStatus("Device paired..");
                UpdateStatus("Starting to connect the device");
                Thread senderThread = new Thread(new ThreadStart(SenderConnectThread));
                senderThread.Start();
            }
        }

        private bool CanPair()
        {
            if(!deviceInfo.Authenticated)
            {
                if(!BluetoothSecurity.PairRequest(deviceInfo.DeviceAddress,myPin))
                {
                    return false;
                }
            }
            return true;
        }

private void LstAvailableDevices_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    deviceInfo = deviceList[lstAvailableDevices.SelectedIndex];
    UpdateStatus(deviceInfo.DeviceName + " was selected, attempting connect");

    if (CanPair())
    {
        UpdateStatus("Device paired..");
        UpdateStatus("Starting connect thread");
        Thread senderThread = new Thread(new ThreadStart(ClientConnectThread));
        senderThread.Start();
    }
    else
    {
        UpdateStatus("Pair failed");
    }
}

private void ClientConnectThread()
{
    BluetoothClient sender = new BluetoothClient();
    BluetoothAddress address = deviceInfo.DeviceAddress;
    //sender.SetPin(deviceInfo.DeviceAddress, myPin);
    var endPoint = new BluetoothEndPoint(address, uId);
    sender.Connect(endPoint);

    //Another way that I've tried
    BluetoothClient client = new BluetoothClient();
    UpdateStatus("Attempting connect");
    //client.Connect(deviceInfo.DeviceAddress, uId);
    client.BeginConnect(deviceInfo.DeviceAddress, uId, this.BluetoothClientConnectCallback, client);
}

void BluetoothClientConnectCallback(IAsyncResult result)
{
    BluetoothClient senderE = (BluetoothClient)result.AsyncState;
    senderE.EndConnect(result);

    Stream stream = senderE.GetStream();

    while (true)
    {
        while (!ready) ;
        byte[] message = Encoding.ASCII.GetBytes(txtSenderMessage.Text);

        stream.Write(message, 0, message.Length);
    }
}

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Ребята, я могу соединить и подключить его, используя одно и то же приложение, запущенное на другом ПК и выступающее в роли сервера.Ранее я пробовал это, не имея того же приложения, запущенного на целевом ПК, и поэтому выдает ошибку, о которой я упоминал выше.

Спасибо, ребята, за ваше время и поддержку.

0 голосов
/ 06 марта 2019

В UWP есть библиотеки, в которых вы можете легко установить соединение между вашим рабочим столом и другими устройствами, вы можете легко справиться с адаптером Bluetooth.

0 голосов
/ 04 марта 2019

Существует несколько загрузок для 32 футов

Попробуйте эти Загрузки https://github.com/inthehand/32feet

Загрузки доступны здесь на вкладке Загрузки.Пакеты также доступны в NuGet: -

InTheHand.Devices.Bluetooth - Modern (v4.x) - Предварительная версия NuGet

32feet.NET - Legacy (v3.x) Версия NuGet

32feet.NET.Phone - версия NuGet для Windows Phone

InTheHand.Devices.Enumeration (средства выбора устройств Windows 8 / Windows Phone) версия NuGet

...