我正在开发一个包含两个组件的应用程序。一个是使用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包)。
我应该以其他方式使用蓝牙连接吗?任何建议都非常感谢。
今天愉快。