通过蓝牙高频率发送数据

时间:2019-01-10 07:56:48

标签: c# android bluetooth android-bluetooth 32feet

我正在开发一个包含两个组件的应用程序。一个是使用C#的MonoAndroid开发的Android应用程序,另一个是使用C#的WPF开发的Windows应用程序。

Android应用程序应发送3字节的包,每秒大约250包。 Windows应用程序应接收并处理所有软件包。

我之间的交流方式如下:

在要连接的Android上,我这样做:

BluetoothDevice pcBluetoothDevice= ... device discovered with BluetoothManager... ;
UUID securedUUID=... my secured uuid ...;
var socket = pcBluetoothDevice.CreateInsecureRfcommSocketToServiceRecord(securedUUID);
socket.Connect();
var outputStream=socket.OutputStream;

要从Android发送,请执行以下操作:

byte[] dataToSend = new byte[3] { 1, 0, 0 };
outputStream.Write(dataToSend, 0, dataToSend.Length);
outputStream.Flush();

在Windows上,我使用32feet.NET Nuget进行连接,如下所示:

var serviceClass = BluetoothService.SdpProtocol;
BluetoothListenerlistener = new BluetoothListener(serviceClass);
listener.Start();
BluetoothClient client = _listener.AcceptBluetoothClient();
NetworkStream peerStream = client.GetStream();

// On A different thread:
while(connected)
{
   byte[] dataBuffer = new byte[3];
   var readSize = _connectionStream.Read(dataBuffer, 0, dataBuffer.Length);
   // put dataBuffer in a queue on a different thread for processing.
}

大多数情况下,此方法有效。唯一的问题是,在发送了几秒钟的数据后,我有时会遇到奇怪的延迟问题。我不确定这是由蓝牙接收器(PC接收到USB),手机蓝牙还是通过蓝牙RFCOMM进行通信的方式引起的。

我发送的数据量很少。我几乎不发送1 KB / s。但是正如我所说,频率很高(每秒100-250包)。

我应该以其他方式使用蓝牙连接吗?任何建议都非常感谢。

今天愉快。

0 个答案:

没有答案