Я создал приложение .NET CORE 3.0 для передачи файлов через последовательный порт, которое отлично работает в Windows, но может читать только небольшие объемы данных в Linux. В основном я передаю данные с одного компьютера, а принимающий компьютер читает данные следующим образом:
_serialPort.ReadBufferSize = 7000000;
...more setup code
Console.WriteLine("Serial receiver started at " + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture) + " Collecting and decoding file data for 4 minute intervals. Please wait...");
Console.WriteLine("Header search pattern: " + BitConverter.ToString(BitConverter.GetBytes(header)));
int sleepTimeMiliseconds = (240000 - (int)stopwatch.Elapsed.TotalMilliseconds < 1) ? 0 : 240000 - (int)stopwatch.Elapsed.TotalMilliseconds;
Thread.Sleep(sleepTimeMiliseconds); // wait for about 4 minutes for the data to come in.
byte[] dataBuffer = new byte[_serialPort.ReadBufferSize];
//read data then discard buffer to get new data from the transmitting machine
if (!_serialPort.IsOpen) // serial port could close when operating system sleeps
_serialPort.Open();
_serialPort.Read(dataBuffer, 0, dataBuffer.Length);
//HundredKBBuffer = Convert.FromBase64String(_serialPort.ReadExisting());
_serialPort.DiscardInBuffer();
stopwatch.Restart();
Console.WriteLine("Data buffer size in bytes: " + dataBuffer.Length);
DecodeFileData(dataBuffer, header, trailer);
Я также пытался использовать _serialPort.BaseStream.Read(dataBuffer, 0, dataBuffer.Length);
вместо _serialPort.Read(dataBuffer, 0, dataBuffer.Length);
, но возникает та же проблема. Я никогда не видел байтов за 4096 в буфере, поэтому я не уверен, как это сделать в среде Linux. Размер буфера меньше и не изменяется? Я использовал _serialPort.ReadBufferSize = 7000000;
, но, похоже, это не помогло. Линукс машина или CentOS или Redhat