Я занимаюсь разработкой приложения, которое состоит из двух компонентов. Одним из них является Android-приложение, созданное в MonoAndroid с C #, а другим - приложение для Windows, созданное в WPF с C #.
Приложение 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.
}
Это работает, большую часть времени. Единственная проблема заключается в том, что после нескольких секунд отправки данных у меня время от времени возникают странные задержки. Я не уверен, вызвано ли это приемником Bluetooth (USB-портом, полученным на ПК), телефоном Bluetooth или тем, как я общаюсь через Bluetooth RFCOMM.
Количество отправляемых данных низкое. Я едва посылаю 1 Кбайт / с. Но, как я уже сказал, частота высокая (100-250 пакетов в секунду).
Должен ли я использовать соединение Bluetooth другим способом? Любое предложение очень ценится.
Хорошего дня.