4
votes

Impossible de connecter un appareil Bluetooth à l'aide de c #

J'utilise une bibliothèque de 32 pieds pour développer l'application WPF de communication Bluetooth, et je suis capable de coupler l'appareil mais je ne travaille pas pour le connecter et je me suis retrouvé avec une exception comme ci-dessous.

Remarque: j'ai essayé pour connecter des appareils comme mon mobile et mon PC, mais les deux donnent les mêmes erreurs que celles expliquées ci-dessous.

J'ai vu quelque part à propos de ce problème et ils ont mentionné comme, ce problème peut être car la bibliothèque de 32 pieds n'est pas compatible avec le périphérique Bluetooth que j'ai sur mon PC.

Mais en fait, j'ai testé cela sur d'autres PC fonctionnant avec le système d'exploitation Windows 7 - 64 bits et recevoir le même message d'erreur.

Quelqu'un m'aide. Merci.

Message d'erreur: l'adresse demandée n'est pas valide dans son contexte ECD09F51114A: 0000110100001000800000805f9b34fb

 Détails de l'exception:

Mon exemple de code:

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);
    }
}


4 commentaires

Est-il possible que l'ID de classe de service (uId dans votre cas) que vous avez spécifié soit incorrect?


Guid uId = nouveau Guid ("00001101-0000-1000-8000-00805f9b34fb"); C'est ce que j'ai spécifié également essayé avec BluetoothService.SerialPort mais en obtenant la même erreur.


pourriez-vous fournir votre code pour d'autres utilisateurs car je ne peux pas me connecter.


@PouriaAnsari Mis à jour.


3 Réponses :


-1
votes

Il y a plusieurs téléchargements pour 32 pieds

Essayez ces Téléchargement https://github.com/inthehand/32feet

Les téléchargements sont disponibles ici dans l'onglet Téléchargements. Les packages sont également disponibles sur NuGet: -

InTheHand.Devices.Bluetooth - Moderne (v4.x) - Aperçu de la version NuGet

32feet.NET - Ancienne version (v3.x) NuGet

32feet.NET.Phone - Version NuGet pour Windows Phone

InTheHand.Devices.Enumeration (sélecteurs de périphériques Windows 8 / Windows Phone) Version NuGet


1 commentaires

J'ai la dernière bibliothèque qui est 32feet 4.0, mais je n'ai pas d'exemples sur la façon de la démarrer / l'utiliser. Pourriez-vous s'il vous plaît m'aider à obtenir des échantillons pour utiliser la bibliothèque 32feet 4.0 - Merci.



-1
votes

Mes amis, je suis capable de le coupler et de le connecter en utilisant la même application fonctionnant sur un PC différent et en agissant comme un serveur. Auparavant, j'ai essayé cela sans avoir la même application en cours d'exécution sur le PC cible et donc cela donne l'erreur que j'ai mentionnée ci-dessus.

Merci les gars pour votre temps et votre soutien.


2 commentaires

Comment puis-je dire alors? La question que j'ai postée ici a une solution maintenant et je l'ai trouvée moi-même et en partageant la même chose en publiant une réponse. Même si je n'ai pas sélectionné ce message comme réponse, comment cela peut-il être voté à la baisse, je ne sais pas?


Posez une nouvelle question ou modifiez la question pour qu'elle corresponde à vos besoins. Un nouveau scénario conviendrait probablement mieux à une nouvelle question. Une question n'a pas de suite, c'est question -> réponse -> fermée. Il peut y avoir de nouvelles réponses à la même question qui viennent avec les nouvelles versions d'une langue ou d'une bibliothèque, mais il ne devrait jamais y avoir de nouvelle question.



1
votes

Il existe des bibliothèques dans UWP où vous pouvez facilement établir une connexion entre votre bureau et d'autres appareils, vous pouvez facilement gérer l'adaptateur Bluetooth.


3 commentaires

Que diriez-vous d'utiliser dans l'application WPF? Parce que j'ai une application WPF qui a une communication de port série pour communiquer / transférer les données vers un périphérique matériel et maintenant je prévois d'ajouter la communication Bluetooth avec la communication série.


Toutes les bibliothèques en C # .NET / WPF pour communiquer l'adaptateur Bluetooth qui est connecté à mon périphérique matériel.


Pouvons-nous déplacer notre discussion ici -> stackoverflow.com/questions/55005961/...