Настройка последовательного порта с помощью ретранслятора 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;
                }
            }

0 ответов

Другие вопросы по тегам