Отправить сообщение сразу после AcceptBluetoothClient с 32feet - PullRequest
0 голосов
/ 13 июня 2018

Я хочу отправить сообщение сразу после подключения устройства.

Итак, я начинаю прослушивать входящие соединения:

    public static void StartListen(BluetoothDeviceInfo foundDevice)
    {
        try
        {
            _listener = new BluetoothListener(_serviceClass);
            _listener.Start();

            _listener.BeginAcceptBluetoothClient(AcceptBluetoothClientCallback, _listener);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

Затем я принимаю соединение асинхронно:

    private static void AcceptBluetoothClientCallback(IAsyncResult ar)
    {
        _client = _listener.AcceptBluetoothClient();
        var stream = _client.GetStream();


        var data = "hello";
        stream.Write(Encoding.ASCII.GetBytes(data), 0, data.Length);
        Console.WriteLine($"canRead: {stream.CanRead}");
        Console.WriteLine($"canWrite: {stream.CanWrite}");

        _client.Close();
    }

Но AcceptBluetoothClient блокируетвызов.Так что я не получаю клиента, пока другая часть не отправит что-то.Есть ли способ получить клиент / поток до этого события?

1 Ответ

0 голосов
/ 02 августа 2018

Из того, что я вижу в коде, вы звоните AcceptBluetoothClient дважды, один из вызовов асинхронный, а другой синхронный (блокирующий).Вы упомянули, что принимаете соединение асинхронно (и это вызывая BeginAcceptBluetoothClient ), поэтому вам не нужно снова вызывать AcceptBluetoothClient внутри функции обратного вызова AcceptBluetoothClientCallback , потому что в тот момент вы уже приняли нового клиента.Итак, вам просто нужно получить поток и продолжить поток.

...