使用32feet在AcceptBluetoothClient之后直接发送消息

时间:2018-06-13 05:47:41

标签: c# 32feet

我想在设备连接到我后直接发送消息。

所以我开始收听传入的连接:

    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 :(得分:1)

根据我在代码中看到的,您两次调用 AcceptBluetoothClient ,其中一个调用是异步的,另一个是同步(阻塞)的。 您提到您正在以异步方式接受连接(即通过调用 BeginAcceptBluetoothClient ),因此您无需在回调函数中再次调用 AcceptBluetoothClient AcceptBluetoothClientCallback ,因为那时您已经接受了新客户端。因此,您只需要获取流并继续进行流。