Настройка последовательного порта с помощью ретранслятора Azure - проблемы синхронизации C# (удаленный последовательный порт)
Я пишу приложение, которое позволяет удаленный доступ к последовательному порту с другого компьютера. Например:
PC1(клиент) подключен к Arduino на COM1 и отправляет и получает последовательные данные через службу ретрансляции Azure с помощью приложения.
На ПК2(сервере) запущено приложение, которое также получает и отправляет эти данные, однако оно сопоставляет эти последовательные данные с виртуальным COM-портом. Затем IDE arduino подключается к этому виртуальному COM-порту и взаимодействует с Arduino.
Проблема, с которой я столкнулся, заключается в том, что последовательные данные, похоже, не синхронизированы, и для примера с Arduino я получаю avrdude:stk500_getsync():not in sync error.
Как мне синхронизировать эти данные? Я включил клиентский и серверный код ниже. Спасибо вам, ребята!
Код клиента
//Read from azure relay and write to serial port
var reads = Task.Run(async () => {
// Initialize the stream reader over the connection.
var reader = new StreamReader(relayConnection);
do
{
// Read Serial Data from azure relay
string line = await reader.ReadToEndAsync();
if (line != "")
{
//write to serial port
sp.Write(line);
}
if (Main.disconnect == true)
{
break;
}
}
while (true);
});
// Read from the serial and write to the hybrid connection.
var writes = Task.Run(async () => {
// var reader = Console.In;
var writer = new StreamWriter(relayConnection) { AutoFlush = true };
do
{
// Read serial data from the serial port.
string line = sp.ReadExisting().ToString();
// Write the line to the hybrid connection (Azure Relay)
if (line != "")
{
await writer.WriteAsync(line);
}
//cancel connection and break loop
if (Main.disconnect == true)
{
break;
}
}
while (true);
});
Код сервера
var writes = Task.Run(async () => {
do
{
//read line from serial port
string line1 = sp.ReadExisting().ToString();
//send line to azure relay
await writer.WriteAsync(line1);
}
while (true);
});
while (!cts.IsCancellationRequested)
{
try
{
//receive line from azure relay
var line = await reader.ReadToEndAsync();
Console.WriteLine(line);
//write line to serial port
sp.Write(line);
}
catch (IOException)
{
Console.WriteLine("Client closed connection");
break;
}
}